1

我正在尝试实现一个按钮侦听器,如果我在 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

感谢您的任何见解!

4

1 回答 1

2

我将假设mybutton位于您的内部Fragment,而不是您的Activity.

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

不能保证在您调用 beginTransaction()...commit() 后片段立即可用,因此这可以解释为什么您不能立即设置侦听器。onStart()但是,当您到达时,您Fragment的按钮已经创建并且您的按钮不为空。

要么继续使用监听器,要么在你的视图在方法中膨胀之后onStart()从你的内部设置它,或者之后的任何地方(可能是最好的地方)。FragmentonCreateView()Fragment LifecycleonActivitycreated()

于 2014-08-26T03:55:50.150 回答