我正在尝试实现一个按钮侦听器,如果我在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
感谢您的真知灼见!
我假设mybutton
位于Fragment
中,而不是Activity
中。
如果是这种情况,那么当您调用initListeners()
时,myButton
可能是null
,因为视图还不一定已经创建。
片段不能保证在调用beginTransaction()后立即可用。。。commit(),这样就可以解释为什么不能直接设置听众。当您到达onStart()
时,您的Fragment
已经创建,并且您的按钮不是空的。
继续使用onStart()
中的侦听器,或者在onCreateView()
方法中膨胀视图后,在Fragment
中设置侦听器,或在Fragment Lifecycle
中的任何位置设置侦听器(onActivitycreated()
可能是最好的位置)。