Sono abbastanza nuovo per Android, quindi questo potrebbe avere una risposta ovvia, ma non riesco a trovarlo.Android: aggiunta di un frammento a un'attività
Sto scrivendo una versione di un'app calcolatrice. Voglio fare in modo che quando un utente fa clic su uno dei pulsanti, questo avvia un frammento (con più pulsanti su di esso che possono quindi utilizzare per più input).
il frammento di codice è il seguente:
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class VariableMenu extends Fragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment, container, false);
}
}
con un layout XML come segue:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/Bx"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="X"
android:onClick="onButtonClicked"/>
<Button
android:id="@+id/By"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/Bx"
android:layout_alignTop="@id/Bx"
android:text="Y"
android:onClick="onButtonClicked"/>
<Button
android:id="@+id/Bz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/By"
android:layout_alignTop="@id/By"
android:text="Z"
android:onClick="onButtonClicked"/>
</RelativeLayout>
(so che non dovrebbe usare le stringhe hard-coded, ma io correggi che una volta che ottengo la cosa in esecuzione)
Ho provato ad averlo aggiunto utilizzando un frammenttransaction con il metodo onTouch del pulsante di attivazione, in questo modo:
public void onFragmentActivated(View v) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
VariableMenu fragment = new VariableMenu();
fragmentTransaction.add(R.layout.main, fragment);
fragmentTransaction.commit();
}
ma che ha dato un errore dicendo che c'era "Nessuna vista trovata per id: ... (principale) per frammento VariableMenu."
Allora ho fatto una visione per esso nel file XML principale:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
(Irrelevant things)
<fragment
android:id="@+id/Fragment"
android:name="calculator.app.VariableMenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/B1"/>
(Irrelevant things)
</RelativeLayout>
Ma questo ha provocato il frammento di essere lì, non appena l'attività è stato creato (e setContentView (R.layout.main) ; corse).
C'è un modo semplice per aggiungere e rimuovere un frammento con un'interfaccia utente a livello di programmazione in un'attività?
+1. @Spencer inoltre, se il tuo frammento può agire come un'attività separata, puoi modificarlo per estendere FragmentActivity e trattarlo come un'attività regolare. – Joe
Grazie mille, ha funzionato perfettamente. Non penso che FragmentActivity possa funzionare in questo caso, ma terrò a mente questa opzione per il futuro. – Spencer