所以我試圖用自定義FragmentStatePagerAdapter實現ViewPager。在我的MainActivity中,我試圖訪問正在顯示的片段,以便我可以修改片段視圖內的子項。Android:從PagerAdapter獲取片段
這裏是定製的片斷:
public class CustomFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_custom, container, false);
return rootView;
}
}
這裏的FragmentStatePagerAdapter:
public class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
private int NUM_PAGES;
public ScreenSlidePagerAdapter(FragmentManager fm, int NUM_PAGES) {
super(fm);
this.NUM_PAGES = NUM_PAGES;
}
@Override
public int getCount() {
return NUM_PAGES;
}
@Override
public Fragment getItem(int position) {
return new CustomFragment();
}
}
這裏是在MainActivity的重要組成部分。這是我嘗試獲取當前由尋呼機適配器顯示的片段的位置。 mPagerAdapter.instantiateItem返回一個片段,但是當我調用primaryFragment.getView()時,我得到一個空指針。
moveViewPagerToIndex(); // Move the view pager to NUM_PAGES/2 to start
primaryFragment = (CustomFragment) mPagerAdapter.instantiateItem(mViewPager, mViewPager.getCurrentItem());
updateFragment();
的updateFragment():
ArrayList<Button> arrayList = Utility.getCellsFromCalendarFragment(primaryFragment.getView());
for (int i = 0; i < arrayList.size(); i++) {
// do stuff with all the cells
}
的Utility.getCellsFromCalendarFragment(查看rootView)
public static ArrayList<Button> getCellsFromCalendarFragment(View rootView) {
ArrayList<Button> cellList = new ArrayList<>();
cellList.add((Button) rootView.findViewById(R.id.cell00));
cellList.add((Button) rootView.findViewById(R.id.cell01));
cellList.add((Button) rootView.findViewById(R.id.cell02));
// There are a lot more than 3 cells... There's roughly 50 cells.
return cellList
}
我通過Android Studio中的調試運行,並觀看了變量 'primaryFragment'。當我調用mViewPager.instantiateItem(...)時,我得到一個實際的CustomFragment。問題是'primaryFragment'現在有一個空視圖,所以當我嘗試訪問視圖來修改單元格時,我得到一個NullPointerException。
所致:顯示java.lang.NullPointerException:嘗試上的空對象引用
如何調用虛擬方法android.view.View android.view.View.findViewById(INT)'我從這個片段中獲得了觀點?這甚至是從視圖傳呼機獲取片段的正確方法嗎?這件事我一直在抓我的頭髮。我只想得到正在顯示的片段並修改其視圖和孩子。
謝謝!