android - fragment 之间的通信: 使用interface

访问量: 63

参考: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();
        }
    }

订阅/RSS Feed

Subscribe

分类/category