2014-07-03 81 views
-1

我已經看過了這個新手android問題的stackoverflow的答案,但我不明白什麼是最佳的解決方案。爲什麼「findViewById」在android的oncreate方法中返回null?

我想創建一個簡單的活動(帶片段),它有幾個文本字段和一個按鈕。當按鈕被按下時,我想按鈕做些事情!

所以我有我的mainActivity類,以及它的代碼片段。我正在嘗試將「onClickListener」正確設置爲我的按鈕對象。

當我在活動本身的「onCreate」方法中這樣做時,它會拋出一個nullpointerexception - 我猜這是因爲按鈕本身還沒有創建。然而,將這些代碼放入OnStart方法會導致它被反覆調用,看起來不合適。

所以我將它移動到「佔位符片段」 - 它不再被報告爲空,但我不能使用意圖導航到另一個頁面(因爲其他頁面不是靜態的,我不能引用當前活動使用「this」)。

我很堅持,它看起來很簡單。

方案1:嘗試啓動它在OnCreate方法(:

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

////////////////////// PROBLEM IS HERE ////////////////////////////////// 
    Button butLogin = (Button) findViewById(R.id.but_login); 
    butLogin.setOnClickListener(butLogin_OnClickListener); 

/////////// 

    if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()) 
       .commit(); 
    } 
} 

第2版 - 碎片代碼,也不起作用:

 @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_made_my_day, container, false); 

     Button butLogin = (Button) rootView.findViewById(R.id.but_login); 
     butLogin.setOnClickListener(butLogin_OnClickListener); 

     return rootView; 
    } 
+0

發佈片段代碼,特別是關於您無法使用的意圖的部分 – panini

+0

現在發佈代碼片段,這不是重複的,因爲我在發佈之前閱讀了其他類似的有關stackoverflow的問題 – rockit

+0

注意:關於引用問題在這個線程之上 - 它建議將代碼移動到「onCreateView」部分 - 我已經完成了,而且我仍然有問題。這不是重複的 – rockit

回答

2

首先,你可以參考一下通過調用getActivity()從片段(它已經附後)的活動,應該足以啓動意圖。例如:。

Intent intent = new Intent(getActivity(), ActivityToCall.class); 
getActivity().startActivity(intent); 

二,but_login按鈕其實在activity_made_my_day.xml還是在fragment_made_my_day.xml?取決於哪個,這是您應該使用findViewById()(活動或片段)的地方。

+0

其在片段 – rockit

+1

@rockit好的,那麼你的片段代碼是正確的。您應該能夠在點擊偵聽器代碼中使用'getActivity()。startActivity(intent)'。 – matiash

+0

當我這樣做時,我仍然收到「Intent intentSmileActivity = new Intent(MadeMyDay.this,SmileListActivity.class);」行上的「mademyday無法從靜態上下文中引用」錯誤在片段 – rockit