为什么setOnClickListener()必须在onCreate()中?

时间:2017-04-11 03:27:09

标签: java android

如果我将setOnClickListener放在onCreate方法之外,则此代码不起作用。我想知道为什么?逻辑是正确的。但是我在onCreate()

之外的地方setOnClickListener中出现了红色错误
public class MainActivity extends AppCompatActivity {

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


        Button playbutton = (Button) findViewById(R.id.button1);  // has to be in inside onCreate()
        playbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,"play",Toast.LENGTH_SHORT).show();
            }
        });

        Button pausebutton = (Button) findViewById(R.id.button2);  // has to be in inside onCreate()
        pausebutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,"pause",Toast.LENGTH_SHORT).show();
            }
        });

    }


}

3 个答案:

答案 0 :(得分:2)

因为必须执行setonClickListener才能工作。因此,如果您输入另一个未调用的函数,它将无法工作。你也可以把它放在onStart和onResume上。

另一件事:你没有编写程序,而是创建一个特定的类对象,一个活动,当你的应用程序启动时,它将由android实例化。因此,将一些代码放在方法之外是一个错误。 我建议您查看有关activitylifecycle

的文档

答案 1 :(得分:0)

<强>的onCreate():

首次创建活动时调用。这是您应该执行所有常规静态设置的地方:创建视图,将数据绑定到列表等。此方法还为您提供包含活动先前冻结状态的Bundle(如果有)。始终紧跟onStart()。

将代码置于此处之外它没有意义,为什么?

因为您的代码永远不会被执行,所以在活动启动时只执行onCreate和onResume中的代码。

答案 2 :(得分:-1)

因为您必须通过引用创建按钮,然后设置onclick侦听器。