如何将数据从片段返回到活动?

时间:2016-08-20 00:01:50

标签: android android-fragments android-intent

我无法将数据从片段返回到活动。

我有活动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

2 个答案:

答案 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();