如何在片段和未附加的活动之间进行通信?

时间:2015-08-19 10:02:40

标签: android fragment communication android-fragmentactivity

我想在片段上的onClick事件后对活动执行某些操作。

我只找到了如何使用getActivity()在片段和附加片段的Activity之间进行通信,这不是我的情况。

4 个答案:

答案 0 :(得分:3)

对于超级简单的解决方案,请使用片段触发活动类中的方法,该方法使用意图来调用所需的活动。

编辑:请查看以下评论​​以获取更多帮助。

答案 1 :(得分:0)

正如其他人所说,你必须使用广播或服务......

但:

最简单快捷的方法是:

创建这两个类::

全局:

public class Globals {

private static final Globals instance = new Globals();
private GlobalVariables globalVariables = new GlobalVariables();

private Globals() {
}

public static Globals getInstance() {
    return instance;
}

public GlobalVariables getValue() {
    return globalVariables;
}

}

和全局变量::

public class GlobalVariables {
    public Activity receiverActivity;
}

不在接收者活动中::

Globals.getInstance().getValue().receiverActivity = this;

发件人现在可以做任何事了!例如,从接收者活动中调用公共方法:

Globals.getInstance().getValue().doSomething();

基本上不推荐,但效果很好。 :d

答案 2 :(得分:0)

您必须创建活动实现的界面。 BroadcastReceivers确实有其优势,但回调解决这个问题是直截了当且容易做到的。

这是一个例子。我们给Activity一个字符串并让它返回一个Integer:

public interface IMyStringListener{
public Integer computeSomething(String myString);
}

可以在片段中或单独的文件中定义接口。接下来,您的Activity实现了接口。

public class MyActivity implements IMyStringListener{

 @Override
 public Integer computeSomething(String myString){
   /** Do something with the string and return your Integer instead of 0 **/ 
   return 0;
  }

}

然后在你的片段中你将有一个MyStringListener变量,你可以在片段onAttach(Activity activity)方法中设置监听器。

public class MyFragment {

    private MyStringListener listener;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            listener = (MyStringListener) activity;
        } catch (ClassCastException castException) {
            /** The activity does not implement the listener. */
        }
    }

}

答案 3 :(得分:0)

使用委托: 一个createView触发委托,并在活动中创建监听器

试试这个: Fragment-Fragment communication in Android

只是委托功能