我想在片段上的onClick
事件后对活动执行某些操作。
我只找到了如何使用getActivity()
在片段和附加片段的Activity之间进行通信,这不是我的情况。
答案 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)