1

在我的主Activity中,我有一个包含FragmentTabHost的DialogFragment。我有两个选项卡,一个是DialogFragment,另一个是ListFragment。当在内部DialogFragment中按下'OK'按钮或按下ListFragment中的元素时,我想要传递两个字符串(在内部DialogFragment中的两个TextView中输入并显示在ListFragment中的每个元素中)回到活动,但我不确定如何使用多层片段来做到这一点。如何在Android中的多个片段之间传递数据

任何帮助表示赞赏!

回答

2

没有魔法。

你可以用两种方法来实现。

  1. 使用回调。

创建接口和类,通过子Fragment将数据传递给Activity。不需要修改桥接TabHostFragment,因为片段始终依赖其母上下文(活动),无论有多少片段包装片段。

public class TwoStrings { 
    public TwoStrings(String one, String two){ 
     this.one = one; 
     this.two = two; 
    } 
    public String one; 
    public String two; 
} 

首先声明接口。

public interface DataPassListener { 
    void dataPassed(TwoStrings data); 
} 

而且,在Activity中实现接口。

​​

最后,让子Fragment确认母亲Activity有回调监听器。

public class DialogFragment1 extends DialogFragment { 
    DataPassListener listener; 

    @Override 
    public void onAttach(Activity activity) { 
     if (activity instanceOf DataPassListener) 
      listener = (DataPassListener) activity; 
    } 

    public void setDataPassListener(DataPassListener listener){ 
     listener = ((DataPassListener) listener); 
    }  

    public void doSomeThing(){ 
     if(listener != null) // important to prevent NullPointerException 
      listener.dataPassed("a", "b"); 
    } 
} 
  • 使用EventBus。
  • 我更愿意使用Otto来发布和订阅数据。

    要在活动收听订阅事件,

    public class MainActivity extends Activity { 
    
        @Override 
        public void onResume() { 
         super.onResume(); 
         BusProvider.getInstance().register(this); 
        } 
    
        @Override 
        public void onPause() { 
         super.onPause(); 
         BusProvider.getInstance().unregister(this); 
        } 
    
        @Subscribe 
        public void onUpdateTwoStrings(TwoStrings event) { 
         // do something with data. 
         Log.d("string one", data.one); 
         Log.d("string two", data.two); 
        } 
    } 
    

    而且,在任何地方片段发布事件。

    ​​
    +0

    谢谢,这非常有帮助! –

    相关问题