2017-04-11 119 views
-1

如果我将setOnClickListener放在onCreate方法之外,此代码不起作用。我想知道为什么?逻辑是正确的。但我得到一个红色的错误中的onCreate以外的地方setOnClickListener()为什么setOnClickListener()必须在onCreate()中?

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(); 
      } 
     }); 

    } 


} 
+0

你可以添加外部onCreate()方法的代码吗? – Avi

回答

0

因为必须执行setonClickListener才能正常工作。因此,如果你放入另一个未调用的函数,它将不起作用。你也可以把它放在onStart和onResume中。

另一件事:你不写一个程序,而是创建一个特定的类对象,一个活动,当你的应用程序启动时,它将由android实例化。因此,在方法外部添加代码是一个错误。 我建议你看看关于activitylifecycle的文档

+0

嗯,我没有把它放在任何方法,这是问题。技术上我认为你可以将它放在任何方法中,但是代码可能不起作用,除非它被调用。所以把它放在创建中是有意义的,因为它总是首先被执行。 –

+0

这就是要点。被调用的方法总结在活动生命周期中(请查看我答案中的链接)。 – Feuby

0

的onCreate():

第一次创建活动时调用。这是您应该完成所有常规静态设置的位置:创建视图,将数据绑定到列表等。此方法还会为您提供一个包含活动先前冻结状态(如果有的话)的Bundle。总是跟着onStart()。

把代码放在这里以外它没有意义,为什么?

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

-1

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

相关问题