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.
- Crear una lista de ViewPager: elementos de la lista en blanco
- Mejor manera de iniciar fragmentos
- Android Project Fragment Transición lanzando Excepción cuando Build target used Nueva API Nivel 21
- Android Descargar varios archivos y mostrar el progreso en ListView
- Añadir fragmento en un fragmento (fragmento anidado)
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" />
- Color de fondo personalizado para el elemento seleccionado con "activatedBackgroundIndicator" Navigation Drawer
- Super.onCreateView en Fragmentos
- OnActivityResult RESULT_OK no se puede resolver a una variable en android?
- Señal fatal 11 (SIGSEGV) código = 2 en genymotion emulador no utilizando NDK
- Disposición de restricción beta 4 - los fragmentos no funcionan
- ¿Cuáles son los casos en los que NO debo utilizar FragmentManager ejecutarPendingTransactions () (dentro del hilo principal)?
- Androide: Elevación no respetada a través de FragmentTransactions
- Android FragmentTransaction Animación personalizada (Nombre del animador desconocido: Traducir)
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.