android - fragment 之间的通信: 使用interface
访问量: 2442
参考: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();
}
}