Saya ingin menambahkan Fragmen ke Aktivitas yang mengimplementasikan tata letaknya secara terprogram. Saya melihat-lihat dokumentasi Fragment tetapi tidak banyak contoh yang menggambarkan apa yang saya butuhkan. Berikut adalah jenis kode yang saya coba tulis:
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;
}
}
Kode ini mengkompilasi tetapi macet di awal, mungkin karena saya FragmentTransaction.add()
salah. Apa cara yang benar untuk melakukan ini?
sumber
ft.add(android.R.id.content, newFragment)
. Hanya diperlukan untuk membuat tata letak khusus dan mengatur id jika wadah fragmen bukan tampilan konten aktivitas.Inilah yang saya dapatkan setelah membaca komentar Tony Wong :
...
...
Kotlin
Jika Anda menggunakan Kotlin, pastikan untuk melihat apa yang disediakan oleh ekstensi Kotlin oleh Google atau tulis sendiri.
sumber
if (savedInstanceState == null)
sebelum pembuatan fragmen, atau setelah memutar layar, Anda akan memiliki dua fragmen atau penataan ulang fragmen. Jangan menggunakanadd
metode sama sekali! Hanyareplace
. Atau Anda akan memiliki perilaku aneh.backStackStateName
string adalah sesuatu yang didefinisikan oleh Anda.main.xml
sumber
Setelah membaca semua Jawaban saya datang dengan cara yang elegan:
pada dasarnya Anda tidak perlu menambahkan frameLayout sebagai wadah dari fragmen Anda, alih-alih Anda dapat menambahkan lurus fragmen ke dalam wadah Android root View
PENTING: jangan gunakan menggantikan fragmen karena kebanyakan dari pendekatan ditampilkan di sini, kecuali jika Anda tidak keberatan kehilangan fragmen variabel contoh negara selama onrecreation proses.
sumber
menggunakan
sumber
Untuk API level 17 atau lebih tinggi,
View.generateViewId()
akan menyelesaikan masalah ini. Metode utilitas memberikan id unik yang tidak digunakan dalam waktu pembuatan.sumber
Untuk melampirkan fragmen ke aktivitas yang terprogram di Kotlin, Anda dapat melihat kode berikut:
MainActivity.kt
activity_main.xml
FragmentName.kt
Jika Anda terbiasa dengan Ekstensi di Kotlin maka Anda bisa lebih baik kode ini dengan mengikuti artikel ini .
sumber