2012-07-08 11 views
8

Estoy reemplazando el fragmento existente con un nuevo fragmento y puedo ver mi vista, pero al configurar el oyente clic en el botón, devuelve nulo. Obtengo la siguiente excepción:findViewById devolviendo nulo en el fragmento

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

No tengo ni idea de qué está pasando?

El código en 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; 

También he importado com.big.xxxxxxx.R

Gracias de antemano por su ayuda

+0

Ya he limpiado y regenerado R.java. – Preethi

+0

por favor agregue el código en el método onCreateView(), especialmente en la línea 34 de su clase xxxxx.java, y agregue el diseño xml también para su fragmento – Houcine

+0

Gracias por la respuesta. He inflado la vista en OnCreateView del fragmento. Es por eso que puedo ver el fragmento pero no puedo establecer ningún tipo de oyentes ya que mi botón parece ser nulo (aunque puedo ver el botón) – Preethi

Respuesta

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; 

Tienes que llamar en findViewById su punto de vista, no en su actividad.

+1

¿Hay alguna razón por la que use findviewbyid en la actividad de la actividad pero en la vista en un fragmento? – user1549672

0

La razón es que en onCreateView la Vista de Fragmento aún no se ha creado, por lo que está devolviendo nulo. Intente hacerlo en onResume y le devolverá 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); 
} 
Cuestiones relacionadas