我正在尝试实现一个按钮监听器,如果我在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
感谢您的任何见解!
答案 0 :(得分:2)
我将假设mybutton
位于Fragment
内,而不是Activity
。
如果是这种情况,当您致电myButton
时,null
可能是initListeners()
,因为视图尚未创建。
一旦调用beginTransaction()... commit(),就不能保证片段可用,这样就可以解释为什么你不能马上设置你的监听器。当您到达onStart()
时,您的Fragment
已创建且您的按钮不为空。
继续使用onStart()
中的监听器,或者在Fragment
方法中使用onCreateView()
方法,或者Fragment Lifecycle
方法中的任何位置后,在onActivitycreated()
内继续使用监听器1}}({{1}}可能是最好的地方)。