Cannot find ViewPager’s Id In a PopupWindow
阿新 • • 發佈:2019-01-26
使用ViewPager,執行後Logcat報出如下錯誤
No view found for id 0x7f080005 (id/view_pager) for fragment AdvertisementImageFragment{419e41d0 #0 id=0x7f080005 android:switcher:2131230725:0}
當時十分糾結為什麼找不到view_page的定義,但是明明已經在xml中做好了定義
<FrameLayout android:layout_width="match_parent" android:layout_height="244dp" android:layout_gravity="center" android:background="@drawable/car_taxi_vendor_advertisement_bg" android:baselineAligned="false" > <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <com.**.view.car.CirclePageIndicator android:id="@+id/indicator" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="12dp" android:layout_gravity="center_horizontal|bottom" /> </FrameLayout>
專案場景: 點選某Activity的Button後,彈出一個居中的小View,在View裡有多個可以滑動展示的圖片。
最開始解決方案: 使用PopupWindwos,把如上的佈局inflator後,賦值給PopupWindows的contentview。ViewPager的Adapter使用的是繼承於FragmentAdapter的類。
contentView = inflater.inflate(R.layout.car_taxi_vendor_advertisement_view, null, false);
popupWindow.setContentView(contentView);
mBannerAdapter = new VendorAdvertisementImageAdapter(baseActivity.getSupportFragmentManager, icons, mImageFetcher);
pager.setAdapter(mBannerAdapter);
執行後,始終提示找不到view_pager的定義。
錯誤原因:因為FragmentAdapter傳入的是Activity的FragmentManger,所以預設是在Activity的佈局xml中尋找ViewPager的定義,但是實際上它是在彈出的View裡定義的。
解決辦法:放棄PopupWindows,使用FragmentDialog。注意:在new FragmentAdapter傳入getChidFragmentManager。
mBannerAdapter = new VendorAdvertisementImageAdapter(getChildFragmentManager(), icons, mImageFetcher);
pager.setAdapter(mBannerAdapter);