eventbus3.0怎么在两个界面间传递数据
答案:1 悬赏:10 手机版
解决时间 2021-11-26 07:01
- 提问者网友:niaiwoma
- 2021-11-25 15:31
eventbus3.0怎么在两个界面间传递数据
最佳答案
- 五星知识达人网友:西风乍起
- 2021-11-25 16:42
每个页面都需要在生命周期中注册和注销EventBus
代码中使用了一个接口定义了一些方法
public interface IText {
void getText(Text text);
void finish();
}
使用一个类实现这些方法,使用这个实现类来处理需要执行的逻辑
public class TextImpl implements IText {
private static final String TAG = TextImpl.class.getSimpleName();
public TextImpl() {
EventBus.getDefault().register(this);
}
@Override
public void getText(Text text) {
Log.e(TAG, "调用getText:" + text);
EventBus.getDefault().post(text, "texttt");
}
@Override
public void finish() {
EventBus.getDefault().unregister(this);
}
}
在方法中使用EventBus.getDefault().post(Object obj,String tag);发送内容,obj可以是对象、字符串等,tag就是对应要接收的方法的注解名。
在第一页中实现对应tag注解的方法,用以更新textView内的数据:
@Subscriber(tag = "texttt")
private void changeText(Text text) {
Log.e(TAG, "hhhhhhhhhhhhh");
mTextView.setText(text.getText());
}
这样的话,EventBus就会把Text这个实体对象传递给第一个Activity,然后根据对应的方法在主线程中更新UI。
需要注意,没有在栈中的Activity是无法传递数据的(例如直接打开第一个Activity,然后传递给尚未打开的第二个Activity,就不能传递。)
代码中使用了一个接口定义了一些方法
public interface IText {
void getText(Text text);
void finish();
}
使用一个类实现这些方法,使用这个实现类来处理需要执行的逻辑
public class TextImpl implements IText {
private static final String TAG = TextImpl.class.getSimpleName();
public TextImpl() {
EventBus.getDefault().register(this);
}
@Override
public void getText(Text text) {
Log.e(TAG, "调用getText:" + text);
EventBus.getDefault().post(text, "texttt");
}
@Override
public void finish() {
EventBus.getDefault().unregister(this);
}
}
在方法中使用EventBus.getDefault().post(Object obj,String tag);发送内容,obj可以是对象、字符串等,tag就是对应要接收的方法的注解名。
在第一页中实现对应tag注解的方法,用以更新textView内的数据:
@Subscriber(tag = "texttt")
private void changeText(Text text) {
Log.e(TAG, "hhhhhhhhhhhhh");
mTextView.setText(text.getText());
}
这样的话,EventBus就会把Text这个实体对象传递给第一个Activity,然后根据对应的方法在主线程中更新UI。
需要注意,没有在栈中的Activity是无法传递数据的(例如直接打开第一个Activity,然后传递给尚未打开的第二个Activity,就不能传递。)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯