android - fragment 之间的通信: 使用interface
访问量: 2084
参考:https://developer.android.com/training/basics/fragments/communicating.html
1. 为fragment1 加上下面的interface:
MyListener myListener; public interface MyListener{ public void onRespondedFromRemoteInitialInterface(); } public void onAttach(Activity activity){ super.onAttach(activity); try{ myListener = (MyListener)activity; }catch (ClassCastException e){ e.printStackTrace(); } }
2. 在Activity中,增加下面代码:
public class YourActivity implements YourFragment.MyListener{ ...... /** * 更新tab2, tab3的界面内容 */ public void onRespondedFromRemoteInitialInterface(){ VerifyIdentityFragment tab2 = (VerifyIdentityFragment)sweetTabAdapter.fragments[1]; tab2.updateViewByIsBindedDevice(); }
3. 在tab2 中,有对应的方法: 即可。
public void updateViewByIsBindedDevice() { ... }
注意:
这里会有一个生命周期的问题: fragment是先渲染,再attach到activity 上。
也就是说,fragment先渲染完毕,然后调用 setUserVisibleHint方法,才会有具体的activity ( 调用onAttach方法)。
如果我们需要在setUserVisibleHint中调用activiy的话,需要先做个非空判断。
// Fragment中的代码。 @Override public void setUserVisibleHint(boolean isVisibleToUser) { Log.d(TAG, "== called setUserVisibleHint. " + String.valueOf(isVisibleToUser)); super.setUserVisibleHint(isVisibleToUser); if(mainActivityListener != null && isVisibleToUser){ Log.d(TAG, "== callled onTab2Focused()"); mainActivityListener.onTab2Focused(); } }