2017-04-11 155 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監聽器。