【问题标题】:onclick listener of a button that isnt shown yet尚未显示的按钮的 onclick 侦听器
【发布时间】:2012-12-06 20:08:52
【问题描述】:

我在做一个非常简单的事情时遇到了一些麻烦。这是发生了什么:

我有一个显示布局 1 的活动。

布局 1 有一个按钮可以移动到布局 2。

布局 2 移回 1。

活动一直持续到最后一部分。我可以打开它,移动到布局 2,但我无法返回。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    position = 1;
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    if(position == 1 ){
        setContentView(R.layout.p1);        
    }
    if(position == 2 ){
        setContentView(R.layout.p2);        
    }


    final Button p1p21 = (Button) findViewById(R.id.p1p2);
    final Button p2p11 = (Button) findViewById(R.id.p2p1);

    p1p21.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            setContentView(R.layout.p2);

        }

    });

    p2p11.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            setContentView(R.layout.p1);

        }

    });

    p2p11.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            setContentView(R.layout.p1);

        }

    });

}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
}

如果我删除这部分:

    p2p11.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            setContentView(R.layout.p1);

        }

    });

那么活动就开始了。所以,我猜问题是我不能为一个还不可见的按钮创建一个 onclicklistener 吗?我该怎么办?

【问题讨论】:

    标签: android layout button onclicklistener forceclose


    【解决方案1】:

    您应该只使用一次 setContentView()。

    【讨论】:

    • 这并没有真正帮助我解决我的问题。如果没有额外的 setcontentview,活动仍然会崩溃。你能补充一下为什么吗?我还能做些什么来更改布局?
    【解决方案2】:

    试试这个:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.p1);
    
        Button button1 = findViewById(R.id.button1);
    
    
        View.OnClickListener listener1 = new View.OnClickListener() {
    
            public void onClick(View v) {
                setContentView(R.layout.p2);
                Button button2 = findViewById(R.id.button2);
                button2.setOnClickListener(listener2);
            }
        });
    
        View.OnClickListener listener2 = new View.OnClickListener() {
    
            public void onClick(View v) {
                setContentView(R.layout.p1);
                Button button1 = findViewById(R.id.button2);
                button1.setOnClickListener(listener1);
            }
        });
    
        button1.setOnClickListener(listener1);
    }
    

    这样您首先初始化侦听器,然后在您处于特定布局时“膨胀”按钮。

    我可能使用了错误的术语,但我很确定这是可行的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-26
      • 2011-11-27
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多