今天遇到挺糾結的問題,由於產品設計的問題,技術上涉及到activity 嵌套一級fragment,一級fragment嵌套二級fragment,在一級fragment中刷新二級fragment中的UI。
其中一級fragment中有頂部搜索欄,搜索欄下面有viewpager+fragment的布局,搜索欄輸入內容后要更新子當前頁面的fragment的搜索方法,並刷新UI.
adapter:
private class OrderManagerFragmentPagerAdapter extends FragmentPagerAdapter { public OrderManagerFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position) { case 0: return NewOrderFragment.newInstance(); case 1: return FollowingFragment.newInstance(); case 2: return DesperatelyFollowingFragment.newInstance(); case 3: return RobbedFragment.newInstance(); case 4: return TransferFragment.newInstance(); case 5: return ClinchDealFragment.newInstance(); case 6: return LostFragment.newInstance(); case 7: return NoEffectFragment.newInstance(); default: return null; } } @Override public CharSequence getPageTitle(int position) { return TITLES[position % TITLES.length]; } @Override public int getCount() { return TITLES.length; } }
調用adapter的getitem()並調用子當前頁面的fragment的搜索方法,並刷新UI,但是出錯,子fragment中UI組件為null,adapter為null;
正確調用姿勢為:
int position = pager.getCurrentItem(); String searchWord = searchtv.getSearchWord(); //兩層fragment嵌套,調用指定fragment的刷新操作,fuck,這方法找了好幾天 Fragment fragment = getChildFragmentManager().getFragments().get(position);
獲取當前顯示的子fragment,然后調用子fragment的搜索方法,並刷新UI.,完美實現。
2016年2月26日21:23:21更
由於這里獲取子fragment,需要進行強制類型轉換,因此有可能出現ClassCastException,所以需要在switch語句外面進行try catch操作進行異常情況的處理。