这是我第一次使用这个库,但我正在关注this视频教程通过Fragments发送数据,但就我而言,它只是活动..所以我这样做
我正在发送数据的活动:
public void onClick(View view) {
String passing_data = new Gson().toJson(user);
BusStation.getBus().post(new MessageData(passing_data));
Intent intent = new Intent(activity,UserAdsView.class);
activity.startActivity(intent);
}
BusStation课程:
public class BusStation {
private static Bus bus = new Bus();
public static Bus getBus() {
return bus;
}
}
MessageData类:
public class MessageData {
private String msgData;
public MessageData(String msgData) {
this.msgData = msgData;
}
public String getMsgData() {
return msgData;
}
}
最后是在UserAdsView活动中:
@Override
protected void onResume() {
super.onResume();
BusStation.getBus().register(this);
}
@Override
protected void onPause() {
super.onPause();
BusStation.getBus().unregister(this);
}
@Subscribe
public void recievedData(MessageData messageData){
target = messageData.getMsgData();
Toast.makeText(getApplicationContext(), target, Toast.LENGTH_SHORT).show();
}
正如视频中所提到的,应该触发此方法recievedData
!
答案 0 :(得分:4)
当您在当时的第一个活动中发送通知时,UserAdsView Activity
未注册,因此有没有的事件侦听器。
在这一行
BusStation.getBus().post(new MessageData(passing_data));
您正在发送通知,但没有注册接收此通知。即UserAdsView Activity
尚未开始。
如果您需要在发布时将数据传递给活动,只需通过它发送即可 Intent
答案 1 :(得分:1)
添加文件Gradle
dependencies {
compile 'com.squareup:otto:1.3.8'
}
创建OttoBus类
public class OttoBus {
private static Bus sBus;
public static Bus getBus() {
if (sBus == null)
sBus = new Bus();
return sBus;
}
}
在android中传递数据时创建事件类
public class Events {
public static class FragmentActivityMessage {
private String message;
public FragmentActivityMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
public static class ActivityFragmentMessage {
private String message;
public ActivityFragmentMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
}
功能传递数据
public void sendMessageToFragment(View view) {
EditText etMessage = findViewById(R.id.activityData);
OttoBus.getBus().post(String.valueOf(etMessage.getText()));
}
函数事件getdata
@Subscribe
public void getMessage(Events.ActivityFragmentMessage message) {
TextView messageView = findViewById(R.id.message);
messageView.setText(message.getMessage());
}
来源:https://code-android-example.blogspot.com/2019/08/pass-data-activity-to-fragment-in-android.html
答案 2 :(得分:0)
您需要将MessageData对象设为parcelable。
然后在onClick()
:
public void onClick(View view) {
String passing_data = new Gson().toJson(user);
Bundle extras = new Bundle();
extras.putParcelable("key",new MessageData(passing_data));
Intent intent = new Intent(activity,UserAdsView.class);
intent.putExtras(extras)
activity.startActivity(intent);
}
然后在您的UserAdsView活动的onCreate()
中:
MessageData data = (MessageData)getIntent().getExtras().getParcelable("key");