Llamada de findViewById en Fragment para encontrar un botón devuelve null

Soy nuevo en el desarrollo de Android y estoy tratando de escribir una aplicación pequeña y sencilla. Esta aplicación no debería hacer nada más que leer el texto de 2 EditTexts y cuando el usuario pulsa el botón "enviar" debería escribir el texto en 2 TextViews. Cada una de estas TextViews está en un fragmento.

Pero no puedo agregar el onClickEvent al botón, porque findViewById (R.id.sendTextButton) devuelve siempre null. He intentado conseguir esta aplicación que trabaja pero no era capaz de encontrar ninguna solución por ahora.

Aquí están los codeBlocks relevantes:

La función onCreateView del fragmento, que debe manejar la primera entrada (HeadlineFragment.java):

Button sendButton = null; View inflatedView = null; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { this.inflatedView = inflater.inflate(R.layout.headline_view, container, false); sendButton = (Button) inflatedView.findViewById(R.id.sendTextButton); if(sendButton == null) { Log.d("debugCheck", "HeadFrag: sendButton is null"); return inflatedView; } sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String headline = ((EditText) v.findViewById(R.id.enterHeadlineText)).getText().toString(); ((TextView) v.findViewById(R.layout.headline_view)).setText(headline); } }); return inflatedView; } 

El archivo xml con el diseño (activity_main.xml):

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/enterHeadlineText" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/enterHeadlineTextHint" android:maxLines="1" android:inputType="textCapSentences" /> <EditText android:id="@+id/enterMessageText" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:hint="@string/enterMessageTextHint" android:maxLines="1" android:inputType="textCapSentences" /> <Button android:id="@+id/sendTextButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="@string/sendTextButton" /> <fragment android:name="com.example.mysecondapplication.HeadlineFragment" android:id="@+id/headlineFragment" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="25dp" /> <fragment android:name="com.example.mysecondapplication.MessageFragment" android:id="@+id/messageFragment" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" /> </LinearLayout> 

Y el archivo xml con TextView, que debe contener el texto (headline_view.xml):

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/headline_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFFFFF" android:text="@string/hello_world" /> 

 this.inflatedView = inflater.inflate(R.layout.headline_view, container, false); sendButton = (Button) inflatedView.findViewById(R.id.sendTextButton); 

Usted está buscando un botón con id sendTextButton dentro de headline_view.xml . Pero desde el diseño que publicó no hay ningún botón con id sendTextButton. Esa manera de obtener nulo

Ese es el problema

 sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String headline = ((EditText) v.findViewById(R.id.enterHeadlineText)).getText().toString(); ((TextView) v.findViewById(R.layout.headline_view)).setText(headline); } }); 

La vista v es la vista que se ha hecho clic, así que de coure v.findViewById () no funciona.
Para lograr su objetivo puede declarar youre EditText y TextView global, en onCreate () utilice el inflater para instanciarlos y onClick método que puede utilizarlos!

Su botón está dentro de activity_main.xml , pero usted está inflando R.layout.headline_view :

 this.inflatedView = inflater.inflate(R.layout.headline_view, container, false); 

Tienes que configurar el onClickListener dentro de la Actividad desde la que administras los fragmentos y no dentro del fragmento, si el Botón no está en el diseño que está inflando tu fragmento.

  • La animación de fragmento de ocultación no se reproduce
  • Uso de ViewPager con fragmentos nativos
  • Obtención de la barra de herramientas en el fragmento
  • Guardar la interfaz de usuario en el cambio de orientación - onSaveInstanceState no funciona como se esperaba si se conserva el fragmento
  • Actividad, AppCompatActivity, FragmentActivity y ActionBarActivity: ¿Cuándo utilizar qué?
  • Seleccione la imagen de la galería en Android Fragment
  • No se puede extender ListFragment - "Llamada requiere API nivel 11"
  • La variable de instancia se convierte en nula en Fragmento retenido
  • ViewPager retaing old Fragmentos en la rotación de la pantalla
  • Comprensión fragmentos backstack
  • DialogFragment: Utilizar AlertDialog con diseño personalizado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.