Sono nuovo nello sviluppo di Android e sto cercando di scrivere un'applicazione piccola e semplice. Questa applicazione non dovrebbe fare altro che leggere il testo da 2 EditTexts e quando l'utente preme il pulsante "invia" dovrebbe scrivere il testo su 2 TextViews. Ognuna di queste TextViews si trova in un frammento.Chiamata di findViewById in Fragment per trovare un pulsante restituisce null
Ma non posso aggiungere onClickEvent al pulsante, poiché findViewById (R.id.sendTextButton) restituisce sempre null. Ho provato a far funzionare questa app ma non sono riuscito a trovare nessuna soluzione.
Ecco gli codeblocks rilevanti:
La funzione onCreateView del frammento, che deve gestire il primo ingresso (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;
}
Il file XML con il layout (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>
e il file xml con l'TextView, che dovrebbe contenere il testo (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"
/>
C'è un modo per cercare in activity_main.xml da dentro il mio frammento o devo accedere al pulsante da un altro file? –
cosa vuoi ottenere. Perché hai bisogno di un pulsante dichiarato all'interno del layout dell'attività all'interno del frammento? Se appartiene alla vista restituita dal frammento, dovresti dichiararlo all'interno di headline_view.xm – Blackbelt
Volevo impostare gli eventi del pulsante, che modificano il contenuto dei frammenti all'interno dei frammenti perché pensavo che questo sarebbe stato una sorta di buon stile. Ma ora cercherò di farlo in qualche altro modo, grazie! –