2012-07-08 10 views
8

Sto sostituendo il frammento esistente con il nuovo frammento e sono in grado di vedere la mia vista ma durante l'impostazione sul listener dei clic sul pulsante restituisce null. Ricevo la seguente eccezione:findViewById restituisce null nel frammento

?:??: 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) 

Non ho idea di cosa sta succedendo?

Il codice sul 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; 

Ho anche importato com.big.xxxxxxx.R

Grazie in anticipo per il vostro aiuto

+0

Ho già pulito e rigenerato R.java. – Preethi

+0

plz aggiungi il codice nel metodo onCreateView(), speciamente nella riga 34 della tua classe xxxxx.java, e aggiungi anche il layout xml per il tuo frammento – Houcine

+0

Grazie per la risposta. Ho gonfiato la vista in OnCreateView del frammento, ecco perché sono in grado di visualizzare il frammento ma non riesco a impostare alcun tipo di ascoltatore poiché il mio pulsante sembra essere nullo (anche se riesco a vedere il pulsante) – Preethi

risposta

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; 

Dovete chiamare findViewById su il tuo punto di vista - non sulla tua attività.

+1

c'è un motivo per cui si usa findviewbyid sull'attività nell'attività ma sulla vista in un frammento? – user1549672

0

Il motivo è che in onCreateView la Vista di Frammento non è ancora stata creata, quindi restituisce null. Prova a farlo in onResume e ti verrà restituita la vista:

@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); 
} 
Problemi correlati