将监听器添加到onStart vs onCreate

时间:2014-08-26 02:57:25

标签: android onclicklistener oncreate onstart

我正在尝试实现一个按钮监听器,如果我在onStart方法中这样做的话。当我在onCreate中初始化时(我读到这是很好的做法),我收到错误“无法更新TargetChangeListener”并且应用程序崩溃。这是主要活动:

public class EventExampleActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_event_example);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();

    }
    initListeners();
}

protected void onStart() {
    super.onStart();
}

private void initListeners() {
    Button myButton = (Button) findViewById(R.id.button1);


    myButton.setOnClickListener(
        new Button.OnClickListener() {

            @Override
            public void onClick(View v) {
                TextView myTextView = (TextView) findViewById(R.id.textView1);
                myTextView.setText("Button Pressed!");              
            }

    });
}
...
...
}

如果有帮助,我正在关注本教程:http://www.techotopia.com/index.php/An_Overview_and_Example_of_Android_Event_Handling

感谢您的任何见解!

1 个答案:

答案 0 :(得分:2)

我将假设mybutton位于Fragment内,而不是Activity

如果是这种情况,当您致电myButton时,null可能是initListeners(),因为视图尚未创建。

一旦调用beginTransaction()... commit(),就不能保证片段可用,这样就可以解释为什么你不能马上设置你的监听器。当您到达onStart()时,您的Fragment已创建且您的按钮不为空。

继续使用onStart()中的监听器,或者在Fragment方法中使用onCreateView()方法,或者Fragment Lifecycle方法中的任何位置后,在onActivitycreated()内继续使用监听器1}}({{1}}可能是最好的地方)。