2012-07-08 49 views
8

我用新的片段替換現有的片段,我能夠看到我的視圖,但在按鈕上設置點擊偵聽器時,它返回null。我收到以下例外情況:findViewById在片段中返回空值

?:??: W/?(?): java.lang.NullPointerException 
?:??: W/?(?): at com.biggu.shopsavvy.fragments.xxxxxxxx.onCreateView(xxxxxx.java:34) 
?:??: W/?(?): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:870) 
?:??: W/?(?): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) 
?:??: W/?(?): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622) 
?:??: W/?(?): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) 
?:??: W/?(?): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420) 
?:??: W/?(?): at android.os.Handler.handleCallback(Handler.java:615) 
?:??: W/?(?): at android.os.Handler.dispatchMessage(Handler.java:92) 
?:??: W/?(?): at android.os.Looper.loop(Looper.java:137) 
?:??: W/?(?): at android.app.ActivityThread.main(ActivityThread.java:4745) 
?:??: W/?(?): at java.lang.reflect.Method.invokeNative(Native Method) 
?:??: W/?(?): at java.lang.reflect.Method.invoke(Method.java:511) 
?:??: W/?(?): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
?:??: W/?(?): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
?:??: W/?(?): at dalvik.system.NativeStart.main(Native Method) 

我不知道發生了什麼?

上OnCreateView代碼:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.capture_card_phone_number, container, false); 
     mPhone = (AutoCompleteTextView) getActivity().findViewById(R.id.phone_number); 
     Button next = (Button) getActivity().findViewById(R.id.capture_phone_next); 
     next.setOnClickListener(this); 
     // next.setEnabled(false); 

     return view; 

我還引進com.big.xxxxxxx.R

在此先感謝您的幫助

+0

我已經清理並重新生成R.java。 – Preethi 2012-07-08 18:16:27

+0

PLZ在方法onCreateView()中添加代碼,在您的xxxxx.java類的第34行中添加代碼,然後爲您的代碼片段添加xml佈局 – Houcine 2012-07-08 18:19:01

+0

感謝您的回覆。我已經誇大了片段的OnCreateView視圖,這就是爲什麼我能夠查看片段,但無法設置任何類型的監聽器,因爲我的按鈕似乎爲空(即使我可以看到按鈕) – Preethi 2012-07-08 18:27:58

回答

23
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle 

    savedInstanceState) { 
      View view = inflater.inflate(R.layout.capture_card_phone_number, container, false); 
      mPhone = (AutoCompleteTextView) getActivity().findViewById(R.id.phone_number); 
      Button next = (Button) view.findViewById(R.id.capture_phone_next); 
      next.setOnClickListener(this); 


      return view; 

你必須調用findViewById上你的觀點 - 而不是你的活動。

+1

是否有一個原因,你使用findviewbyid在活動中的活動,但在片段的視圖? – user1549672 2013-08-06 20:35:54

0

原因是在onCreateView的片段視圖尚未創建,所以它返回null。嘗試在onResume中完成,它會返回給您視圖:

@Override 
public void onResume() { 
    super.onResume(); 
    mPhone = (AutoCompleteTextView) getActivity().findViewById(R.id.phone_number); 
    Button next = (Button) getActivity().findViewById(R.id.capture_phone_next); 
    next.setOnClickListener(this); 
}