0

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

我有一个显示布局 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?我该怎么办?

4

2 回答 2

0

尝试这个:

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);
}

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

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

于 2012-12-16T23:30:00.537 回答
0

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

于 2012-12-06T20:55:11.650 回答