Come aggiungere un frammento a un'attività con una vista di contenuto creata programmaticamente
Voglio aggiungere un Fragment a un'attività che implementa il suo layout programmaticamente. Ho guardato la documentazione di Fragment ma non ci sono molti esempi che descrivono ciò di cui ho bisogno. Ecco il tipo di codice che ho provato a scrivere:
public class DebugExampleTwo extends Activity {
private ExampleTwoFragment mFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout frame = new FrameLayout(this);
if (savedInstanceState == null) {
mFragment = new ExampleTwoFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(frame.getId(), mFragment).commit();
}
setContentView(frame);
}
}
...
public class ExampleTwoFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
Button button = new Button(getActivity());
button.setText("Hello There");
return button;
}
}
Questo codice compila ma si blocca all'inizio, probabilmente perché il mio FragmentTransaction.add()
non è corretto. Qual è il modo corretto di farlo?
224
3
Si è scoperto che c'è più di un problema con quel codice. Un frammento non può essere dichiarato in quel modo, all'interno dello stesso file java dell'attività ma non come classe interna pubblica. Il framework si aspetta che il costruttore del frammento (senza parametri) sia pubblico e visibile. Spostando il frammento nell'attività come classe interna, o creando un nuovo file java per il frammento si risolve il problema.
Il secondo problema è che quando si aggiunge un frammento in questo modo, è necessario passare un riferimento alla vista contenente il frammento, e questa vista deve avere un id personalizzato. Usando l'id di default, l'applicazione andrà in crash. Ecco il codice aggiornato:
Ecco cosa mi è venuto in mente dopo aver letto il commento di Tony Wong:
...
...
Kotlin
Se stai usando Kotlin assicurati di dare un'occhiata a ciò che le estensioni Kotlin di Google forniscono o semplicemente scrivi il tuo.
usa