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.

  • Cómo obtener elementos en el cajón de navegación para cambiar la vista
  • ¿Cómo utilizar actividades o fragmentos en un flujo de trabajo de varias pantallas?
  • Vista de lista de Android dentro de un fragmento
  • No se puede extraer del fragmento
  • Tirar para actualizar y loadmore listview como facebook
  • Got "java.lang.IllegalStateException: Fragmento ya activo" cuando el diseño no está vacío
  • Disposición de restricción beta 4 - los fragmentos no funcionan
  • Utilizar smoothScrollTo en Fragmento
  • Barra de herramientas de Android + Diseño de pestaña + Cajón, Ocultar barra de herramientas al desplazarse y llevar TabLayout a la parte superior
  • App fallando al usar fragmentos
  • La animación de fragmentos de Android se repite de nuevo en el cambio de orientación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.