【问题标题】:Adding listener to onStart vs onCreate将侦听器添加到 onStart 与 onCreate
【发布时间】:2014-08-26 02:57:25
【问题描述】:

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

感谢您的任何见解!

【问题讨论】:

  • ButtononClickListener 接口吗?我只知道View.onClickListener
  • @suitianshi 一开始我也很惊讶,但是当我尝试时,它实际上是指View.OnClickListener(因为Button extends View),所以我认为这不是问题。
  • 你的按钮是在fragment中,还是在activity中?

标签: android onclicklistener oncreate onstart


【解决方案1】:

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

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

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

要么继续使用onStart() 中的侦听器,要么在Fragment 中设置它,在onCreateView() 方法中扩展您的视图之后,或者在Fragment Lifecycle 之后的任何位置(onActivitycreated() 是可能是最好的地方)。

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 2013-02-17
    • 2011-09-28
    • 1970-01-01
    • 2023-03-27
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    相关资源
    最近更新 更多