我无法将数据从片段返回到活动。
我有活动A :是添加产品的主要活动,用户点击文本视图(selectCategory)时此活动会向用户显示活动B 哪些内容片段Bb (所有类别的类别),当用户点击某些类别时,该应用将显示具有片段Cc (子类别)的用户活动C.
我的问题:当用户点击某个子类别时,我需要片段Cc 中的哪些内容将数据返回活动A 然后显示给用户。< / p>
通话 - &gt; B
categoryTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i= new Intent(A.this,B.class);
i.putExtra("fragmenttype","CategoryFragment");
startActivityForResult(i,10);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 10) {
if (resultCode == RESULT_OK) {
titleProduct.setText(data.getStringExtra("nodecategory"));
}
}
}
将数据从抄送片段返回到 A 但没有任何反应(我需要从代码转到活动A 来捕获{{}中的数据1}}):
onActivityResult
答案 0 :(得分:0)
我倾向于严重依赖EventBus来处理像你这样的案件。使用 EventBus 可以让我们的生活变得更简单。我们不需要在这里和那里使用接口来混乱我们的代码。
A ---&gt;乙
首先,A将使用:
启动B.Intent i= new Intent(A.this, B.class);
i.putExtra("fragmenttype","CategoryFragment");
startActivity((i); // No need using startActivityForResult,
// instead receive it from Event generated by B.class.
然后在B中,只要有需要捕获的东西就发送事件:
EventBus.getDefault().post(new MyEvent("passed_data"));
// You can finish B activity if its job finished.
finish();
使用 MyEvent 类:
public class MyEvent {
private String data;
public MyEvent(String data) {
this.data = data;
}
public String getData() {
return data;
}
}
在A中,接收事件:
@Subscribe
public void onEventMessage(MyEvent event) {
// process event here
mTextView.setText(event.getData);
}
对于C - &gt;一个
考虑一下我们展示了C活动。每当我们想要告知A基于C活动需要做的事情时(我们做的事情),我们只需要用数据激活事件:
EventBus.getDefault().post(new DataFromCEvent("your_c_data"));
DataFromCEvent ,如:
public class DataFromCEvent {
private String data;
public DataFromCEvent(String data) {
this.data = data;
}
public String getData() {
return data;
}
}
在A中,您可以通过添加:
来接收它@Subscribe
public void onEventMessage(DataFromCEvent event) {
// process event here
mTextView.setText(event.getData);
}
这也适用于片段。我们只需针对其他活动中需要的某些更改触发事件。
答案 1 :(得分:0)
对您的活动B使用Intent.FLAG_ACTIVITY_FORWARD_RESULT。
EX-&GT; ActivityA - &gt; ActivityB - &gt; ActivityC - &gt; ActivityA
ActivityA:
Intent intentB = new Intent(this, ActivityB.class);
startActivityForResult(intentB, requestCode);
ActivityB:活动B将转发到
Intent intentC = new Intent(this, ActivityC.class);
intentC.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(intentC);
finish();
ActivityC:
setResult(resultCode);
finish();