Saya memiliki bagian yang ingin saya tambahkan ke tampilan.
FragmentManager fragMgr=getSupportFragmentManager();
feed_parser_activity content = (feed_parser_activity)fragMgr
.findFragmentById(R.id.feedContentContainer);
FragmentTransaction xaction=fragMgr.beginTransaction();
if (content == null || content.isRemoving()) {
content=new feed_parser_activity(item.getLink().toString());
xaction
.add(R.id.feedContentContainer, content)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack(null)
.commit();
Log.e("Abstract", "DONE");
}
Ketika kode ini dieksekusi saya mendapatkan kesalahan berikut dalam debug ..
java.lang.IllegalArgumentException: No view found for id 0x7f080011
for fragment feed_parser_activity{41882f50 #2 id=0x7f080011}
feed_parser_activity
adalah Fragmen yang diatur ke tata letak Fragmen di xml.
Saya menggunakan FragmentActivity untuk menjadi tuan rumah Tata Letak Fragmen memegang feed_parser_layout
.
Apakah saya mengkode ini dengan benar di atas?
android
android-fragments
illegalargumentexception
coder_For_Life22
sumber
sumber
Jawaban:
Saya mengalami masalah ini juga, sampai saya menyadari bahwa saya telah ditentukan tata letak yang salah dalam
setContentView()
satuonCreate()
metode FragmentActivity tersebut.Id yang diteruskan
FragmentTransaction.add()
, dalam kasus AndaR.id.feedContentContainer
, harus merupakan anak dari tata letak yang ditentukan dalamsetContentView()
.Anda tidak menunjukkan
onCreate()
metode Anda kepada kami , jadi mungkin ini adalah masalah yang sama.sumber
TextView
dalamRelativeLayout
adalah anak dariRelativeLayout
.Kesalahan ini juga terjadi ketika memiliki fragmen bersarang dan menambahkannya dengan getSupportFragmentManager () alih-alih getChildFragmentManager ().
sumber
Solusinya adalah menggunakan
getChildFragmentManager()
dari pada
getFragmentManager()
saat menelepon dari sebuah fragmen. Jika Anda memanggil metode dari suatu kegiatan, maka gunakan
getFragmentManager()
.Itu akan menyelesaikan masalah.
sumber
getSupportFragmentManager()
sebagai gantinya.getFragmentManager()
sudah usang, sekarang!Saya punya masalah ini (ketika membangun UI saya dalam kode) dan itu disebabkan oleh saya
ViewPager
(yang menunjukkanFragment
s) tidak memiliki set ID, jadi saya hanya menggunakanpager.setID(id)
dan kemudian bekerja.Halaman ini membantu saya mengetahui hal itu.
sumber
Skenario lain yang saya temui. Jika Anda menggunakan fragmen bersarang, katakanlah ViewPager dalam Fragmen dengan halaman itu juga Fragmen.
Ketika Anda melakukan transaksi Fragmen di fragmen dalam (halaman ViewPager), Anda akan perlu
getActivity () adalah kuncinya di sini. ...
sumber
Dalam kasus saya, saya mencoba untuk menampilkan DialogFragment yang berisi pager dan pengecualian ini dilemparkan ketika FragmentPagerAdapter berusaha menambahkan Fragmen ke pager. Berdasarkan jawaban howettl saya kira itu karena orangtua Pager bukanlah tampilan yang ditetapkan di setContentView () di FragmentActivity saya.
Satu-satunya perubahan yang saya lakukan untuk menyelesaikan masalah adalah dengan membuat FragmentPagerAdapter lewat di FragmentMager yang diperoleh dengan memanggil getChildFragmentManager (), bukan yang diperoleh dengan memanggil getFragmentManager () seperti biasanya.
sumber
Pengecualian ini juga dapat terjadi jika ID tata letak yang Anda lewati
FragmentTransaction.replace(int ID, fragment)
ada di tata letak lain yang sedang meningkat. Pastikan ID tata letak unik dan harus berfungsi.sumber
Sebuah jawaban yang saya baca di utas lain yang serupa dengan ini yang bekerja untuk saya ketika saya memiliki masalah ini melibatkan tata letak xml.
Logcat Anda mengatakan "Tidak ada tampilan yang ditemukan untuk id 0x7f080011".
Buka
gen->package->R.java->id
dan kemudian cari id0x7f080011
.Ketika saya memiliki masalah ini, id ini milik a
FrameLayout
di sayaactivity_main.xml
file .FrameLayout tidak memiliki ID (tidak ada pernyataan
android:id = "blablabla"
).Pastikan semua komponen Anda di semua tata letak Anda memiliki ID, terutama komponen yang dikutip dalam logcat.
sumber
Saya mendapatkan kesalahan ini ketika saya meningkatkan dari
com.android.support:support-v4:21.0.0
kecom.android.support:support-v4:22.1.1
.Saya harus mengubah tata letak dari ini:
Untuk ini:
Jadi tata letak HARUS memiliki tampilan anak. Saya berasumsi mereka menerapkan ini di perpustakaan baru.
sumber
Dengan fragmen bersarang
Bagi saya dengan menggunakan
getChildFragmentManager()
bukannyagetActivity().getSupportFragmentManager()
crash yang diselesaikansumber
Saya tahu ini sudah dijawab untuk satu skenario, tetapi masalah saya sedikit berbeda dan saya pikir saya akan berbagi kalau-kalau ada orang lain di sepatu saya.
Saya melakukan transaksi di dalam
onCreate()
, tetapi pada titik ini pohon tampilan belum meningkat sehingga Anda mendapatkan kesalahan yang sama. Masukkan kode transaksionResume()
membuat semuanya berjalan dengan baik.Jadi pastikan kode transaksi Anda berjalan setelah struktur tampilan meningkat!
sumber
onAttach
. Lihat jawabanSaya menghadapi kesalahan Nasty ketika menggunakan Viewpager di dalam Recycler View. Kesalahan di bawah ini saya hadapi dalam situasi khusus. Saya memulai sebuah fragmen yang memiliki RecyclerView dengan Viewpager (menggunakan FragmentStatePagerAdapter). Ini bekerja dengan baik sampai saya beralih ke fragmen yang berbeda pada klik Sel di RecyclerView, dan kemudian menavigasi kembali menggunakan tombol Kembali perangkat keras Ponsel dan App crash.
Dan yang lucu tentang ini adalah bahwa saya memiliki dua Viewpagers dalam RecyclerView yang sama dan keduanya berjarak sekitar 5 sel (yang lain tidak terlihat di layar, itu turun). Jadi awalnya saya hanya menerapkan Solusi ke Viewpager pertama dan meninggalkan yang lain apa adanya (Viewpager menggunakan Fragmen).
Menavigasi kembali berfungsi dengan baik, ketika pager tampilan pertama dapat dilihat. Sekarang ketika saya menggulir ke bawah ke yang kedua dan kemudian mengubah fragmen dan kembali, itu hancur (Hal yang sama terjadi dengan yang pertama). Jadi saya harus mengubah kedua Viewpagers.
Bagaimanapun, baca di bawah ini untuk menemukan solusi yang berfungsi. Galat Crash di bawah ini:
Menghabiskan berjam-jam men-debug-nya. Baca posting Utas lengkap ini sampai bagian bawah menerapkan semua solusi termasuk memastikan bahwa saya melewati childFragmentManager.
Tidak ada yang berhasil.
Akhirnya alih-alih menggunakan FragmentStatePagerAdapter, saya memperluas PagerAdapter dan menggunakannya di Viewpager tanpa Menggunakan fragmen. Saya percaya beberapa di mana ada BUG dengan fragmen bersarang. Bagaimanapun, kami memiliki opsi. Baca ...
Tautan di bawah ini sangat membantu:
Viewpager Tanpa Fragmen
Tautan mungkin mati sehingga saya memposting Solusi saya yang diterapkan di sini di bawah:
}
Semoga ini bermanfaat !!
sumber
Saya memiliki masalah yang sama tetapi masalah saya terjadi pada perubahan orientasi. Tidak ada solusi lain yang berfungsi. Jadi ternyata saya lupa menghapus
setRetainInstance(true);
dari fragmen saya, ketika melakukan tata letak dua atau satu panel berdasarkan ukuran layar.sumber
Kesalahan saya ada di
FragamentTransaction
.Saya sedang melakukan ini
t.replace(R.layout.mylayout);
bukant.replace(R.id.mylayout);
Perbedaannya adalah bahwa satu adalah tata letak dan yang lainnya adalah referensi ke
layout(id)
sumber
Untuk berjaga-jaga seandainya seseorang membuat kesalahan bodoh yang sama dengan yang saya lakukan; periksa apakah Anda tidak menimpa konten aktivitas di suatu tempat (yaitu mencari panggilan tambahan ke setContentView)
Dalam kasus saya, karena penyalinan dan tempelan yang ceroboh, saya menggunakan DataBindingUtil.setContentView dalam fragmen saya, alih-alih DataBindingUtil.inflate, yang mengacaukan keadaan aktivitas.
sumber
Saya memiliki masalah yang sama, biarkan saya memposting kode saya sehingga Anda semua dapat melihatnya, dan tidak melakukan hal yang sama seperti yang saya lakukan.
Perhatikan bahwa saya sedang menyiapkan fragmen sebelum saya
setContentView
. Ups.sumber
setContentView
dalamonBuildHeaders
Halaman ini tampaknya menjadi lokasi pusat yang bagus untuk memposting saran tentang Fragment IllegalArgumentException. Inilah satu hal lagi yang bisa Anda coba. Inilah yang akhirnya berhasil untuk saya:
Saya lupa bahwa saya memiliki file tata letak terpisah untuk orientasi lanskap. Setelah saya menambahkan wadah FrameLayout saya di sana juga, fragmen bekerja.
Pada catatan terpisah, jika Anda sudah mencoba yang lain yang disarankan di halaman ini (dan seluruh internet juga) dan telah mencabut rambut Anda selama berjam-jam, pertimbangkan untuk membuang fragmen-fragmen yang menjengkelkan ini dan kembali ke tata letak standar lama yang baik. (Sebenarnya itulah yang sedang saya lakukan ketika saya akhirnya menemukan masalah saya.) Anda masih dapat menggunakan konsep wadah. Namun, alih-alih mengisinya dengan fragmen, Anda dapat menggunakan
include
tag xml untuk mengisinya dengan tata letak yang sama seperti yang akan Anda gunakan dalam fragmen Anda. Anda dapat melakukan sesuatu seperti ini di tata letak utama Anda:di mana
former_fragment_layout
nama file tata letak xml yang Anda coba gunakan dalam fragmen Anda. Lihat Menggunakan Kembali Tata Letak dengan menyertakan untuk info lebih lanjut.sumber
Dalam kasus saya, saya memiliki SupportMapFragment dalam item tampilan pendaur ulang (saya menggunakan overhead yang lebih rendah "liteMode" yang membuat peta tampak non-interaktif, hampir seperti gambar statis). Saya menggunakan FragmentManager yang benar, dan semuanya tampak berfungsi dengan baik ... dengan daftar kecil. Setelah daftar item melebihi ketinggian layar sedikit maka saya mulai mendapatkan masalah ini saat menggulir.
Ternyata, itu karena saya menyuntikkan SupportMapFragment dinamis di dalam tampilan, yang berada di dalam fragmen lain, untuk mengatasi beberapa masalah yang saya alami ketika mencoba mendeklarasikannya secara statis di XML saya. Karena itu, tata letak placeholder fragmen hanya bisa diganti dengan fragmen yang sebenarnya setelah tampilan dilampirkan ke jendela, yaitu terlihat di layar. Jadi saya telah meletakkan kode saya untuk menginisialisasi SupportMapFragment, melakukan penggantian Fragmen, dan memanggil getMapAsync () di acara onAttachedToWindow.
Apa yang saya lupa lakukan adalah memastikan bahwa kode saya tidak berjalan dua kali. Yaitu di acara onAttachedToWindow, periksa apakah SupportMapFragment dinamis saya masih nol sebelum mencoba membuat contoh baru dan lakukan penggantian Fragment. Ketika item keluar dari bagian atas RecyclerView, itu dilepaskan dari jendela, lalu disambungkan kembali ketika Anda menggulir kembali ke sana, sehingga acara ini dipecat beberapa kali.
Setelah saya menambahkan cek nol, itu terjadi hanya sekali per item RecyclerView dan masalah hilang! TL; DR!
sumber
Ini terjadi ketika Anda menelepon dari sebuah fragmen di dalam yang lain.
gunakan:
sumber
Saya mengalami masalah ini ketika saya mencoba mengganti tampilan dengan fragmen saya di
onCreateView()
. Seperti ini:Itu memberitahuku
Lalu saya memperbaiki masalah ini dengan meletakkan ganti
onActivityCreated()
. Seperti ini:onCreateView()
sehingga Anda dapat menggantinya nantionActivityCreated()
Semoga ini membantu!
sumber
Saya memperbaiki bug ini, saya menggunakan
commitNow()
ganticommit()
.Ini
commitNow
adalah metode sinkronisasi,commit()
metode ini adalah metode async.sumber
Dalam kasus saya pengecualian ini dilemparkan ketika saya menggunakan id berbeda untuk elemen tata letak yang sama (fragmen placeholder) sambil memiliki beberapa dari mereka untuk Build Variants yang berbeda. Untuk beberapa alasan ini berfungsi dengan sangat baik ketika Anda mengganti fragmen untuk pertama kalinya, tetapi jika Anda mencoba melakukannya lagi Anda mendapatkan pengecualian ini. Jadi pastikan Anda menggunakan id yang sama jika Anda memiliki beberapa tata letak untuk Build Variants yang berbeda.
sumber
Jika Anda mencoba untuk mengganti sebuah fragmen dalam sebuah fragmen dengan
fragmentManager
tetapi Anda tidak menggembungkan fragmen induk yang dapat menyebabkan masalah.Di BaseFragment.java
OnCreateView
:Ganti
super.onCreateView(inflater, container, savedInstanceState);
dengan menggelembungkan tata letak yang benar untuk fragmen:sumber
Saya memiliki masalah yang sama ketika melakukan transaksi fragmen saat membuat aktivitas.
Masalah intinya adalah apa yang telah ditunjukkan oleh Nick - view tree belum meningkat. Tapi solusinya tidak bekerja - pengecualian yang sama di onResume, onPostCreate dll.
Solusinya adalah menambahkan callback ke fragmen kontainer untuk memberi sinyal ketika sudah siap:
Dan kemudian dalam aktivitas:
sumber
Dalam kasus saya, saya menggunakan file kelas fragmen untuk mendeklarasikan kelas adaptor listview. Saya hanya menggunakan file yang berbeda untuk kelas adaptor publik dan kesalahan sudah hilang.
sumber
Masalah ini juga terjadi ketika Anda tidak menempatkan
<include layout="@layout/your_fragment_layout"/>
di Andaapp_bar_main.xml
sumber
Ini terjadi juga ketika Anda memiliki dua tampilan dalam dua fragmen dengan id yang sama
sumber
Saya memiliki masalah yang sama karena saya mencoba menambahkan fragmen sebelum menambahkan tata letak kontainer ke aktivitas.
sumber
Terkadang karena Anda menggunakan BottomNavigationView. Jika Anda membuka Intent dari navigasi dan dalam aktivitas itu Anda membuka sebuah fragmen katakanlah
maka Kegiatan tidak akan dapat menemukan metode navigasi yang Anda gunakan.
SOLUSI: Ubah aktivitas menjadi fragmen dan kelola navigasi dengan addOnBackStack di aplikasi Anda. Jika Anda telah menerapkan Navigasi Jetpack, gunakan saja fragmen di proyek Anda.
sumber
Dalam kasus saya. Saya memiliki
Activity
serveral denganFragment
beberapa waktu saya harus membuat ulangFragment
kapanSaya menghapus semua
Fragment
s dan mengatur semua kenull
dalam aktivitas tetapi Fragment sudah membuat sendiri, sementara itu aktivitas host adalah bean set null, jadi sebelum memanggil tampilan Fragment periksa nullsebagai contoh
sumber