private ListtagLists;1 其次,在適配器java類中重寫instantiateItem方法,把fragment對應的標簽存儲在taglists集合里 public Object instantiateItem(ViewGroup container, int position) { tagLists.add(makeFragmentName(container.getId(), (int) getItemId(position))); return super.instantiateItem(container, position); } 代碼中makeFragmentName()方法的實現 public static String makeFragmentName(int viewId, int index) { return "android:switcher:" + viewId + ":" + index; } 再次,在適配器的java類中寫一個update()方法,用于指定更新哪個fragment,public void update(int item) { Fragment fragment = fm.findFragmentByTag(tagList.get(item)); if (fragment != null) { switch (item) { case 0: break; case 1: ((FragmentB) fragment).query(); break; case 2: ((FragmentC) fragment).query(); break; case 3: break; } } } 從代碼看出,FragmentB和FragmentC中都有一個query()方法,這個方法是后面我們用接口回掉機制更新指定fragment要使用的方法,用于實現我們需要更新的內容。接下來就是我們的重要環節了:通過接口回調機制來實現指定fragment的數據更新。 第一步,定義一個接口類,并在viewpager所在的java類中實現 接口類:public interface FragmentListener { public void onFragmentClickListener(int item); }123 viewpager所在的java類中實現:public void onFragmentClickListener(int item) { //adapter為我們自定義的適配器對象 adapter.update(item); adapter.update(item); } 第二步,在觸發要更新fragement數據事件的fragment中重寫onAttach()方法。比如我這里是點擊fragmentB中一個 Button,實現fragmentB中button狀態的改變和fragmentC中的數據進行更新,那么就重寫fragmentB的 onAttach()方法。private static FragmentListener listener; public void onAttach(Activity activity) { listener = (FragmentListener) activity; super.onAttach(activity); } 這里定義為static是因為我的button點擊事件是在fragmentB中listview的適配器java類中實現的,且這個適配器java類是獨立封裝出來的。若你的觸發事件在fragment的java類中實現的,就不需要定義為static。 第三步,在我們需要對數據進行更新的時候,就調用我們自定義的接口,if (FragmentB.listener != null) {//FragmentB自身刷新 FragmentB.listener.onFragmentClickListener
(1); //FragmentC刷新 FragmentB.listener.onFragmentClickListener
(2);
本文地址:http://www.beanologies.com/show/44_148698.html