0

単純なタスクに問題があります。

2 つのボタンがあり、同時に 1 つだけを表示したいので、1 つをタッチすると非表示になり、もう 1 つが表示されます。

これは私のコードです:

fromAnex = new Button(this);
    fromAnex.setText("from");
    fromAnex.setOnClickListener(new Button.OnClickListener() {

        @Override
        public void onClick(View v) {
            Log.d("ONClickListener", "from anex");
            returnFromAnex();
        }
    });
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.LEFT_OF,plano.getId());
    params.addRule(RelativeLayout.CENTER_VERTICAL);
    rl.addView(fromAnex,params);
    fromAnex.setVisibility(View.GONE);


    toAnex = new Button(this);
    toAnex.setText("to");
    toAnex.setOnClickListener(new Button.OnClickListener() {

        @Override
        public void onClick(View v) {
            Log.d("ONClickListener", "Show anex");
            showAnex();
        }
    });
    RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
    params2.addRule(RelativeLayout.RIGHT_OF,plano.getId());
    params2.addRule(RelativeLayout.CENTER_VERTICAL);
    rl.addView(toAnex,params2);

private void showAnex()
{
    fromAnex.setVisibility(View.VISIBLE);
    toAnex.setVisibility(View.GONE);

    private void returnFromAnex()
{
    fromAnex.setVisibility(View.GONE);
    toAnex.setVisibility(View.VISIBLE);

理由は本当にわかりませんが、へfromAnex.setVisibility(View.GONE);の最初の呼び出しは期待どおりに機能し、showAnex() への最初の呼び出しも機能しfromAnex.setVisibility(View.VISIBLE); ていますが、toAnex.setVisibility(View.GONE);すぐ下では機能しません。

その後、タッチしてもボタンの表示に何も起こりません。

誰かが私のコードの何が問題なのかを知ることができますか?

私の悪い英語で申し訳ありませんが、ありがとうございます。

編集:

その 2 つの方法は完全ではありません。残りの方法は、このボタンの表示の問題とは関係ありません。

ボタンを作成した直後に可視性を設定すると機能しますが、可視性を再び設定することはできません。それが問題です。

4

1 に答える 1

0

あなたのスニペットを取って、私は以下を実行しようとしましたが、それは完全に機能します.DevTestが言ったように、どこかで小さな間違いを犯していると思います.

public class MainActivity extends Activity {
Button fromAnex,toAnex;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        RelativeLayout rl=new RelativeLayout(getApplicationContext());
        RelativeLayout.LayoutParams relPra=new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        rl.setLayoutParams(relPra);

        fromAnex = new Button(this);
        fromAnex.setText("from");
        fromAnex.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.d("ONClickListener", "from anex");
                returnFromAnex();
            }
        });
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.CENTER_VERTICAL);
        rl.addView(fromAnex,params);
        fromAnex.setVisibility(View.GONE);
        fromAnex.setId(1);


        toAnex = new Button(this);
        toAnex.setId(2);
        toAnex.setText("to");
        toAnex.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.d("ONClickListener", "Show anex");
                showAnex();
            }
        });
        RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        params2.addRule(RelativeLayout.RIGHT_OF,fromAnex.getId());
        params2.addRule(RelativeLayout.CENTER_VERTICAL);
        rl.addView(toAnex,params2);

        setContentView(rl);
    }
    private void showAnex()
    {
        fromAnex.setVisibility(View.VISIBLE);
        toAnex.setVisibility(View.GONE);
    }
        private void returnFromAnex()
    {
        fromAnex.setVisibility(View.GONE);
        toAnex.setVisibility(View.VISIBLE);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}
于 2013-07-17T12:02:37.530 に答える