【问题标题】:Unexpected behavior with button visibility - Android按钮可见性的意外行为 - Android
【发布时间】:2013-07-17 11:44:48
【问题描述】:

我在完成一项简单的任务时遇到了问题。

我有 2 个按钮,我希望同时只有一个可见,所以当您触摸一个按钮时,它会隐藏而另一个会出现。

这是我的代码:

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); 工作正常,第一次调用fromAnex.setVisibility(View.VISIBLE); 的 showAnex() 也可以,但是下面的toAnex.setVisibility(View.GONE); 不起作用。

然后,当我触摸按钮时,可见性没有任何变化。

有人可以看到我的代码有什么问题吗?

对不起,我的英语不好,谢谢。

编辑:

这两个方法不完整,其余的与此按钮可见性问题无关。

当我在创建按钮后将可见性设置为消失时,它可以工作,但我无法再次将可见性设置为消失,这就是问题所在。

【问题讨论】:

  • 是否缺少一些源代码?您的方法 showAnexreturnFromAnex 上没有右括号 }
  • 只是让您知道,有一个名为 ViewSwitcher 的视图可以在两个视图之间切换,并且适合您的情况。

标签: android android-button


【解决方案1】:

使用您的 sn-p,我尝试运行以下命令,它运行良好。我猜您在 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;
    }

}

【讨论】:

    猜你喜欢
    • 2011-10-21
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2012-06-15
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    相关资源
    最近更新 更多