Android Fragment ID için hiç görüş bulunamadı?


287

Bir görünüme eklemeye çalıştığım bir parçam var.

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");
}

Bu kod yürütüldüğünde hata ayıklama aşağıdaki hatayı alıyorum ..

java.lang.IllegalArgumentException: No view found for id 0x7f080011 
   for fragment feed_parser_activity{41882f50 #2 id=0x7f080011}

feed_parser_activityxml'de Parça düzeni olarak ayarlanmış bir Parça'dur.
Ben holding Fragment Layout barındırmak için bir FragmentActivity kullanıyorum feed_parser_layout.
Bunu yukarıda doğru şekilde kodluyor muyum?


3
XML'i ekleyebilir misiniz?
jsmith

1
Aktivitede setContentView çağırmadan önce parça işlemi yaparken aynı hatayı alabilirsiniz
Pavel

Yanıtlar:


374

Ben fark edene kadar ben yanlış düzen belirtilen ettiğini de bu sorunu başlamıştı setContentView()ait onCreate()FragmentActivity yöntemi.

FragmentTransaction.add()Sizin durumunuzda aktarılan kimlik , içinde R.id.feedContentContainerbelirtilen mizanpajın alt öğesi olmalıdır setContentView().

Bize onCreate()yönteminizi göstermediniz , belki de bu aynı problemdir.


5
SetContentView öğesinde belirtilen mizanpajın çocuğuyla ne demek istiyorsun? Nasıl çocuk olunur?
NinjaCoder

11
XML'deki üst görünüm içinde bildirilmişse, görünüm başka bir görünümün alt öğesidir. yani. a'nın TextViewiçi RelativeLayoutbir çocuğu RelativeLayout.
howettl

@howettl: Biraz eski yazı olduğunu biliyorum. Ama cevabınızla bu sorunu çözemiyorum. İşte SO sorusu: stackoverflow.com/questions/25844394/… - Bu konuda bana yardımcı olabilir misiniz? Teşekkürler!
TheDevMan

@howettl, benzer bir konuda bana yardımcı olabilir misiniz? stackoverflow.com/questions/26966623/…
Vamsi Challa

3
Başıma geldi. CTRL + C CTRL + V'nin olumsuz tarafı.
0nyx

297

Bu hata aynı zamanda İç İçe Parçacıklara sahipken ve getChildFragmentManager () yerine getSupportFragmentManager () ile eklerken de oluşur .


10
Benimki tam tersiydi. GetChildFragmentManager () çağırarak ana parça kabına eklemeye çalışıyordu. Bunu işaret etmek benim için çözdü. Teşekkürler +1
speedynomads

@Malachiasz: ViewPager hakkındaki bu soruya bir göz atabilir misiniz? Teşekkür ederim stackoverflow.com/questions/27937250/…
Hoa Vu

Bu benim sorunumdu, teşekkürler. Tuhaf, bu sadece .show () çağrıldığında yatay yönde gerçekleşti. Ana parçayı değiştirmek için kullanmak iyi çalıştı.
cohenadair

1
Bu benim sorunumdu, çok teşekkür ederim! Sadece bazı yavaş cihazlarda gerçekleşiyordu, bu yüzden tam olarak ne olduğunu anlamak zordu.
YawaraNes

1
Bu soruya birkaç kez geldikten sonra kimsenin benim sorunum olmadığını hissettim, sadece biraz aşağı kaydırmak zorunda kaldım. Hata kodunun, durumun böyle olabileceğini söylemek için daha spesifik olması iyi olurdu.
KodyVanRy

67

Çözüm, getChildFragmentManager()

onun yerine getFragmentManager()

bir parçadan çağırırken. Yöntemi bir etkinlikten çağırıyorsanız, öğesini kullanın getFragmentManager().

Bu sorunu çözecektir.


4
@ surfer190 kullanın getSupportFragmentManager().
Amir Hossein Ghasemi

GetChildFragmentManager () değiştirildi ve bu çalışıyor !!
Şam

Benim durumumda alt sayfa parçasında viewpager kullanarak parça navigasyonu kullanıyordum. Çözümünüz harika çalıştı !! Thanx kardeşim.
Debasish Ghosh

1
aynı sorunu vardı ve bu benim için çözdü! Bunu düşündüğümde mantıklı olan getActivity (). getFragmentManager () yerine getChildFragmentManager () :) TY!
Simon

Metodu bir aktiviteden arıyorum ama getFragmentManager()şimdi kullanımdan kaldırıldı!
Alireza Noorali

29

Ben bu sorun vardı (benim UI kodunu inşa ederken) ve benim ViewPager(bu gösterdi Fragments) bir kimlik seti olmaması nedeniyle, bu yüzden sadece kullanılan pager.setID(id)ve sonra çalıştı neden oldu.

Bu sayfa bunu anlamama yardımcı oldu.


1
ViewPager kullanıldığında aynı sorun vardı. Aynı hata, işlem gerçekleştirilmeden önce viewPager.setCurrentItem (n) kullanılarak düzeltildi. Belki birisi için yararlı olacaktır.
Kirk Hammett

Benim durumumda benzer bir yöndeydi, ancak sorun .setID'de negatif bir değer kullanmamdı. Pozitif bir tamsayı kullanmak sorunu çözdü.
Ignacio Hagopian

29

Karşılaştığım başka bir senaryo. İç içe fragmanlar kullanıyorsanız, bir Fragmandaki sayfalarıyla da bir ViewPager söyleyin.

İç parçada (ViewPager sayfası) Parça işlemi yaptığınızda,

FragmentManager fragmentManager = getActivity().getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

Burada anahtar getActivity (). ...


evet ... benim için diğer tüm uygulamalar bunun dışında iyiydi. Doğrudan böyle kod erişmek için çalıştı: FragmentTransaction transaction = getSupportFragmentManager (). BeginTransaction (); Sonra getActivity () kullanarak sizin bahsettiğiniz gibi ayrı parça aldım. Güzel çalışıyor
anand krish

18

Benim durumumda bir çağrı cihazı içeren bir DialogFragment göstermeye çalışıyordum ve FragmentPagerAdapter çağrı cihazına Fragment eklemeye çalıştığında bu istisna atıldı. Howettl cevabına dayanarak, çağrı cihazı üst nedeniyle benim FragmentActivity setContentView () set görünümü değildi sanırım.

Sorunu çözmek için yaptığım tek değişiklik, normalde yaptığım gibi getFragmentManager () çağrılarak elde edilen değil, getChildFragmentManager () çağrılarak elde edilen bir FragmentMager içinde geçen FragmentPagerAdapter oluşturmaktı.

    public class PagerDialog extends DialogFragment{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.pager_dialog, container, false);

        MyPagerAdapter pagerAdapter = new MyPagerAdapter(getChildFragmentManager());
        ViewPager pager = (ViewPager) rootView.findViewById(R.id.pager);
        pager.setAdapter(pagerAdapter);

        return rootView;
    }
}

getChildFragmentManager () öğesine DialogFragment
Abdalrahman Shatou

14

Bu istisna ayrıca, geçmekte olduğunuz düzen kimliği FragmentTransaction.replace(int ID, fragment)şişirilmekte olan diğer düzenlerde mevcutsa da oluşabilir . Düzen kimliğinin benzersiz olduğundan ve çalıştığından emin olun.


Derleyici, benzersiz değilse kimliğin mevcut düzende eksik olup olmadığını bildirmez , bu nedenle gerçek sorun kimliğin benzersizliği değil, geçerli düzende kimliğin atlanmasıdır.
Samuel

13

Ben bu sorunu vardı benim için çalıştı buna benzer başka bir iş parçacığında okumak bir cevap düzeni xml yer aldı.

Logcat'iniz "0x7f080011 kimliği için görünüm bulunamadı" diyor.

Öğesini açın gen->package->R.java->idve ardından kimliği arayın0x7f080011 .

Bu sorun yaşadığında, bu kimliği bir aitti FrameLayoutiçinde benimactivity_main.xml dosyaya.

FrameLayout'ta bir kimlik yoktu (ifade yoktu) android:id = "blablabla" ).

Tüm mizanpajlarınızdaki tüm bileşenlerinizin, özellikle de logcat'te belirtilen bileşenin kimliklerine sahip olduğundan emin olun.


1
Güzel. LinuxOS ile Android Studio'da işte burada: / home / bob / AndroidStudioWorkspace / HelloWorld / app / build / oluşturulan / kaynak / r / release / android / support / v7 / appcompat.
portsample

11

Ben yükseltmiş bu hata var com.android.support:support-v4:21.0.0etmekcom.android.support:support-v4:22.1.1 .

Düzenimi bundan değiştirmek zorunda kaldım:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container_frame_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout> 

Buna:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/container_frame_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </FrameLayout>

</FrameLayout> 

Böylece düzen bir çocuk görünümü ZORUNDADIR . Yeni kütüphanede bunu uyguladıklarını varsayıyorum.


9

İle iç içe parçaları

Çözümlenmiş çökme getChildFragmentManager()yerine kullanarak benim içingetActivity().getSupportFragmentManager()

java.lang.IllegalArgumentException: id için görünüm bulunamadı


ama içindeki adaptör cant imprt getchild impragmentManger neden
Sunil Chaudhary

8

Bunun bir senaryo için zaten yanıtlandığını biliyorum, ama sorunum biraz farklıydı ve başka birinin ayakkabılarımda olması durumunda paylaşacağımı düşündüm.

İçinde bir işlem yapıyordum onCreate() , ancak bu noktada görünüm ağacı şişirilmedi, bu yüzden aynı hatayı alıyorsunuz. İşlem kodunu girmekonResume() her şeyin yolunda gitmesini sağlamıştır.

Bu nedenle, işlem ağacınızın şişirilmesinden sonra işlem kodunuzun çalıştığından emin olun!


3
Hmm ... benim durumumda böyle bir kodun onCreate veya onResume'de olması fark yaratmadı
IgorGanapolsky

@IgorGanapolsky benim durumumda, parçanın geri arama ile çözüldü onAttach. Cevabımı
Alexander Malakhov

Bu benim sorunumdu. Bir görünüm durumunu yenilemek için başka bir sınıfa yapılan çağrı, henüz şişirilmemiş bir düzen üzerinde parça işlemi gerçekleştiriyordu. OnResume () yönteminde çağrılması sorunu çözdü.
AWT

8

Recycler View içinde Viewpager kullanırken kötü bir hatayla karşı karşıya kaldım. Hatanın altında özel bir durumla karşılaştım. Viewpager ile (FragmentStatePagerAdapter kullanarak) bir RecyclerView olan bir parça başlattım. RecyclerView'da bir Hücrenin tıklanmasında farklı bir parçaya geçene ve Telefonun donanım Geri düğmesini ve Uygulama çöktüğünde geri dönene kadar iyi çalıştı.

Ve buradaki komik olan, aynı RecyclerView'de iki Viewpager'ım olması ve her ikisinin de yaklaşık 5 hücre uzakta olmasıydı (diğerleri ekranda görünmüyordu, aşağıdaydı). Bu yüzden başlangıçta Çözümü ilk Viewpager'a uyguladım ve diğerini olduğu gibi bıraktım (Parçalar kullanarak Viewpager).

İlk görüntüleme çağrı cihazı görüntülenebildiğinde, geri gitmek iyi çalıştı. Şimdi ikincisine ilerlediğimde parçayı değiştirip geri döndüğümde, çöktü (birincisi ile aynı şey oldu). Bu yüzden her iki Vizörü de değiştirmek zorunda kaldım.

Her neyse, çalışma çözümünü bulmak için aşağıyı okuyun. Aşağıdaki Kilitlenme Hatası:

java.lang.IllegalArgumentException: No view found for id 0x7f0c0098 (com.kk:id/pagerDetailAndTips) for fragment ProductDetailsAndTipsFragment{189bcbce #0 id=0x7f0c0098}

Hata ayıklamak için saatler geçirdim. ChildFragmentManager'ı geçirdiğimden emin olmak da dahil olmak üzere tüm çözümleri uygulayana kadar bu Konu başlığını okuyun.

Hiçbir şey çalışmadı.

Son olarak FragmentStatePagerAdapter kullanmak yerine, PagerAdapter'i genişlettim ve parçaları kullanmadan Viewpager'da kullandım. İç içe parçalara sahip bir HATA olduğu yerlere inanıyorum. Her neyse, seçeneklerimiz var. Oku ...

Aşağıdaki bağlantı çok yardımcı oldu:

Parçasız Viewpager

Bağlantı ölebilir, bu yüzden aşağıda benim uyguladığım Çözümü aşağıda gönderiyorum:

public class ScreenSlidePagerAdapter extends PagerAdapter {
private static final String TAG = "ScreenSlidePager";
ProductDetails productDetails;
ImageView imgProductImage;
ArrayList<Imagelist> imagelists;
Context mContext;

// Constructor
public ScreenSlidePagerAdapter(Context mContext,ProductDetails productDetails) {
    //super(fm);
    this.mContext = mContext;
    this.productDetails = productDetails;
}

// Here is where you inflate your View and instantiate each View and set their values
@Override
public Object instantiateItem(ViewGroup container, int position) {
    LayoutInflater inflater = LayoutInflater.from(mContext);
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.product_image_slide_cell,container,false);

    imgProductImage = (ImageView) layout.findViewById(R.id.imgSlidingProductImage);
    String url = null;
    if (imagelists != null) {
        url = imagelists.get(position).getImage();
    }

    // This is UniversalImageLoader Image downloader method to download and set Image onto Imageview
    ImageLoader.getInstance().displayImage(url, imgProductImage, Kk.options);

    // Finally add view to Viewgroup. Same as where we return our fragment in FragmentStatePagerAdapter
    container.addView(layout);
    return layout;
}

// Write as it is. I don't know much about it
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View) object);
    /*super.destroyItem(container, position, object);*/
}

// Get the count
@Override
public int getCount() {
    int size = 0;

    if (productDetails != null) {
        imagelists =  productDetails.getImagelist();
        if (imagelists != null) {
            size = imagelists.size();
        }
    }
    Log.d(TAG,"Adapter Size = "+size);
    return size;
}

// Write as it is. I don't know much about it
@Override
public boolean isViewFromObject(View view, Object object) {

    return view == object;
}

}

Umarım bu yardımcı oldu!


Evet, bu çözüm işe yaradı, ancak kendi yaşam döngüsü ve değişkenleri ile zor bir yapıya ihtiyacım olursa, sadece görünümlere değil? Oynatma ve sessiz düğmelerine sahip videoViews ve imageViews ile kullanılacaktır. Benim durumum için yararlı bir şey yok mu?
Nikita Axyonov

Bunun nedeni olduğuna inanıyorum: stackoverflow.com/a/27966053/1377819
Hoang Nguyen Huu

7

Aynı sorunu yaşadım ama benim sorunum oryantasyon değişikliğiyle ilgili. Diğer çözümlerin hiçbiri işe yaramadı. setRetainInstance(true);Ekran boyutuna göre iki veya bir bölme düzeni yaparken parçalarımdan kaldırmayı unuttuğum ortaya çıkıyor .


yuvalanmış bir parçadaysanız setRetainInstance (true) değerini false olarak ayarlayın, bu hatayı düzeltir.
ralphgabb

5

Benim hatam FragamentTransaction .

Bunu t.replace(R.layout.mylayout);yerine yapıyordumt.replace(R.id.mylayout);

Fark şudur ki biri mizanpaj, diğeri mizanpajın layout(id)


4

Birisinin yaptığım aynı aptal hatayı yapması durumunda; bir yerde etkinlik içeriğinin üzerine yazmadığınızdan emin olun (yani setContentView için ek çağrı arayın)

Benim durumumda, dikkatsiz kopyalama ve yapıştırma nedeniyle, etkinliğinin durumunu bozan DataBindingUtil.inflate yerine, parçamda DataBindingUtil.setContentView kullandım.


3

Ben de aynı sorunu vardı, hepinizi görebilmeniz için kodumu göndereyim ve yaptığım şeyi yapmıyorum.

@Override
protected void onResume()
{
    super.onResume();

    fragManager = getSupportFragmentManager();

    Fragment answerPad=getDefaultAnswerPad();
    setAnswerPad(answerPad);
    setContentView(R.layout.abstract_test_view);
}
protected void setAnswerPad(AbstractAnswerFragment pad)
{
    fragManager.beginTransaction()
        .add(R.id.AnswerArea, pad, "AnswerArea")
        .commit();
    fragManager.executePendingTransactions();
}

Benden önce parçalar kurduğumu unutmayın setContentView. Hata.


1
Teşekkür ederim! Benim koymak yüzden, aynı şeyi yapıyordu setContentViewiçini benimonBuildHeaders
Randy

3

Bu sayfa Fragment IllegalArgumentException hakkında öneri göndermek için iyi bir merkezi konum gibi görünüyor. İşte deneyebileceğiniz bir şey daha. Sonunda benim için işe yarayan buydu:

Yatay yönlendirme için ayrı bir düzen dosyam olduğunu unutmuştum. FrameLayout kabımı da oraya ekledikten sonra parça çalıştı.


Ayrı bir notta, bu sayfada önerilen her şeyi (ve tüm İnternet'i) zaten denediyseniz ve saatlerce saçınızı çekiyorsanız, bu sinir bozucu parçaları boşaltmayı ve eski standart bir düzene geri dönmeyi düşünün. (Aslında sorunumu sonunda keşfettiğimde yaptığım şey buydu.) Konteyner konseptini hala kullanabilirsiniz. Ancak, bir parça ile doldurmak yerine, parçanızda kullandığınız includemizanpajla doldurmak için xml etiketini kullanabilirsiniz . Ana düzeninizde böyle bir şey yapabilirsiniz:

<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <include layout="@layout/former_fragment_layout" />

</FrameLayout>

Nerede former_fragment_layoutsenin fragmanında kullanmaya çalıştıklarını xml düzenini dosyasının adıdır. Bkz dahil olan Düzenleri Yeniden kullanarak daha fazla bilgi için.


bu iyi bir öneridir, ancak parçaları dinamik olarak değiştirmek gerekirse işe yaramaz. Ayrıca yeniden kullanılabilirliği de azaltır, çünkü parçadaki davranışı (kodu) kapsülleyebilirsiniz.
Alexander Malakhov

Kesinlikle katılıyorum. Parçalar çok daha iyi.
Suresi

2

Benim durumumda bir geri dönüşüm görünümü öğesinde bir SupportMapFragment vardı (Ben haritayı neredeyse statik bir görüntü gibi, etkileşimli olmayan görünmesini sağlar alt havai "liteMode" kullanıyordum). Doğru FragmentManager'ı kullanıyordum ve her şey iyi çalışıyor gibi görünüyordu ... küçük bir listeyle. Öğe listesi ekran yüksekliğini biraz aştığında, kaydırma yaparken bu sorunu almaya başladım.

Görünüşe göre, XML'imde statik olarak bildirmeye çalışırken karşılaştığım bazı sorunları çözmek için başka bir parçanın içindeki bir görünümün içine dinamik bir SupportMapFragment enjekte ediyordum. Bu nedenle, parça yer tutucu yerleşimi ancak görünüm pencereye eklendikten sonra, yani ekranda göründüğünde gerçek parça ile değiştirilebilir. Bu yüzden SupportMapFragment'ı başlatmak, Fragment değiştirme işlemini yapmak ve onAttachedToWindow olayında getMapAsync () çağırmak için kodumu koymuştum.

Ne yapmayı unuttum kodumun iki kez çalışmadığından emin olmaktı. Yani onAttachedToWindow olayında, dinamik SupportMapFragment'ımın yeni bir örneğini oluşturmaya ve bir Fragment değiştirme yapmaya çalışmadan önce hala boş olup olmadığını kontrol edin. Öğe RecyclerView öğesinin üst kısmından çıktığında, pencereden ayrılır, ardından geri kaydırdığınızda yeniden bağlanır, böylece bu olay birden çok kez tetiklenir.

Sıfır kontrolünü ekledikten sonra, RecyclerView öğesi başına sadece bir kez oldu ve sorun ortadan kalktı! TL; DR!


2

Bu, başka bir parçanın içindeki bir parçadan aradığınızda olur.

kullanın:

getActivity().getSupportFragmentManager().beginTransaction();

1

Görünümü benim parçamla değiştirmeye çalıştığımda bu sorunla karşılaştım onCreateView(). Bunun gibi:

public class MyProjectListFrag extends Fragment {


    private MyProjectListFragment myProjectListFragment;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        FragmentManager mFragmentManager = getFragmentManager();
        myProjectListFragment = new MyProjectListFragment();
        mFragmentManager
                .beginTransaction()
                .replace(R.id.container_for_my_pro_list,
                        myProjectListFragment, "myProjectListFragment")
                .commit();
    }

Bana söyledi

11-25 14:06:04.848: E/AndroidRuntime(26040): java.lang.IllegalArgumentException: No view found for id 0x7f05003f (com.example.myays:id/container_for_my_pro_list) for fragment MyProjectListFragment{41692f40 #2 id=0x7f05003f myProjectListFragment}

Sonra yerine koymak koyarak bu sorunu düzeltti onActivityCreated(). Bunun gibi:

public class MyProjectListFrag extends Fragment {

    private final static String TAG = "lch";

    private MyProjectListFragment myProjectListFragment;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        return inflater
                .inflate(R.layout.frag_my_project_list, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

        FragmentManager mFragmentManager = getFragmentManager();
        myProjectListFragment = new MyProjectListFragment();
        mFragmentManager
                .beginTransaction()
                .replace(R.id.container_for_my_pro_list,
                        myProjectListFragment, "myProjectListFragment")
                .commit();

    }
  1. İçinde bir görünüm döndürmeniz gerekiyor onCreateView() daha sonra değiştirebilmeniz gerekir
  2. Parça görünümündeki aşağıdaki fonksiyonda bu görünüme doğru herhangi bir işlem koyabilirsiniz, örneğin onActivityCreated()

Bu yardımcı olur umarım!


1

Bu hatayı düzelttim, commitNow()değiştirmeyi kullanıyorum commit().

mFragment.getChildFragmentManager()
  .beginTransaction()
  .replace(R.id.main_fragment_container,fragment)
  .commitNowAllowingStateLoss();

Bu commitNowbir senkronizasyon yöntemidir, commit()yöntem bir zaman uyumsuz yöntemdir.


1

Benim durumumda, aynı mizanpaj öğesi (parça yer tutucusu) için farklı kimlikler kullandığımda, bunlardan birkaçı farklı Yapı Varyantları için kullandığımda bu istisna atıldı. Herhangi bir nedenle, parçayı ilk kez değiştirirken mükemmel bir şekilde çalışır, ancak tekrar yapmaya çalışırsanız bu istisnayı elde edersiniz. Farklı Yapı Varyantları için birden çok düzeniniz varsa aynı kimliği kullandığınızdan emin olun.


0

Bir parçanın içindeki bir parçayı yerine koymaya çalışıyorsanız, fragmentManagerancak üst parçayı şişirmiyorsanız soruna neden olabilecek .

In BaseFragment.java OnCreateView :

if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .replace(R.id.container, new DifferentFragment())
                    .commit();
        }

return super.onCreateView(inflater, container, savedInstanceState);

super.onCreateView(inflater, container, savedInstanceState); Parça için doğru düzeni şişirerek değiştirin :

        return inflater.inflate(R.layout.base_fragment, container, false);

0

Etkinlik yaratırken parça işlemi yaparken de aynı sorunu yaşadım.

Temel sorun, Nick'in zaten işaret ettiği şeydir - görüş ağacı henüz şişirilmedi. Ancak çözümü işe yaramadı - onResume, onPostCreate vb.

Çözüm, hazır olduğunda sinyal vermek için kap parçasına geri arama eklemektir:

public class MyContainerFragment extends Fragment {
    public static interface Callbacks {
        void onMyContainerAttached();
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        Log.d(TAG, "--- onAttach");
        ((Callbacks) activity).onMyContainerAttached();
    }

    //... rest of code
}

Ve sonra faaliyette:

public class MainActivity extends Activity
        implements MyContainerFragment.Callbacks
{
    @Override
    public void onMyContainerAttached() {
        getFragmentManager()
                .beginTransaction()
                .replace(R.id.containerFrame, new MyFragment())
                .commit();
    }

    //...
}

0

Benim durumumda, bir listview bağdaştırıcı sınıfı bildirmek için bir parça sınıf dosyası kullanıyordum. Genel bağdaştırıcı sınıfı için farklı bir dosya kullandım ve hata gitti.




0

Etkinliğe kapsayıcı yerleşimini eklemeden önce parça eklemeye çalıştığım için aynı sorunla karşılaştım.


0

Bazen bir BottomNavigationView kullanıyorsunuz. Navigasyondan bir Amaç açarsanız ve bu aktivitede bir parça açarsanız,

transaction.replace(R.id.container,new YourFragment());

Etkinlik kullandığınız gezinme yöntemini bulamaz.

ÇÖZÜM: Uygulamanızdaki addOnBackStack ile etkinliği parçalara ayırın ve gezinmeyi yönetin. Jetpack Navigasyon'u uyguladıysanız, projenizde sadece parçaları kullanın.


0

Benim durumumda. Bir var ActivityServeral ile Fragmentyeniden yaratmaya ler biraz zaman ben ihtiyacı Fragmentler ne zaman

  • dil değişimdir
  • fragman düzeni bazılarına gerek yok veya içerik değişikliği yeniden oluşturmalı
  • diğer değişiklikler
  • Tüm Fragments'leri temizler ve tüm nullaktivitelere ayarlıyorum , ancak ana bilgisayar aktivitesi fasulye kümesi null iken, Parça zaten kendini yaratır, bu yüzden Aramadan önce Parça görünümünü kontrol et null

    Örneğin

    Activity{
        fragment
        recreate{
           fragment = null then new instance
        }
    
    }
    
    Fragment{
        if((activity).fragment != null) {
           findViewById()
        }
    
    }
    Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
    Licensed under cc by-sa 3.0 with attribution required.