1. 程式人生 > >Cannot find ViewPager’s Id In a PopupWindow

Cannot find ViewPager’s Id In a PopupWindow

使用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);