【问题标题】:How I can return data from fragment to activity?如何将数据从片段返回到活动?
【发布时间】:2016-08-20 00:01:50
【问题描述】:

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

我有活动A:是添加产品的主要活动,用户单击文本视图(selectCategory)时,此活动向用户显示活动B哪些内容片段Bb(所有类型的Category),当用户点击其中一些类别时,应用程序将显示具有fragment Cc(子类别)的用户活动C。

这是我的问题:当用户点击该子类别中的某些内容时,我需要将 fragment Cc 中的内容返回给 activity A,然后向用户显示。

A 调用 --> 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"));
    }
  }
}

将数据从 Cc fragment 返回到 A 但什么也没发生(我需要从代码转到 activity A 以捕获 @987654324 中的数据@):

@Override
public void onClick(TreeNode node, Object value) {
  Intent i = new Intent();
  i.putExtra("nodecategory","hi");
  getActivity().setResult(Activity.RESULT_OK, i);
  getActivity().finish();
}

【问题讨论】:

标签: android android-fragments android-intent


【解决方案1】:

我倾向于严重依赖EventBus 来处理像您这样的案件。使用 EventBus 让我们的生活更简单。我们不需要到处乱写代码。

A ---> B

首先,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 中,只要有 A 需要捕获的东西,就发送 Event:

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中,接收Event

@Subscribe
public void onEventMessage(MyEvent event) {
  // process event here
  mTextView.setText(event.getData);
}

对于 C --> A

假设我们有展示 C 活动。每当我们想根据 C 的活动通知 A 需要做某事(我们所做的事情)时,我们只需要使用数据触发 Event:

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);
}

这也适用于片段。我们只需要为我们在其他活动中需要的一些更改触发一个事件。

【讨论】:

  • 感谢您回答我,这是我需要的。
【解决方案2】:

在您的活动 B 上使用 Intent.FLAG_ACTIVITY_FORWARD_RESULT。

Ex-> ActivityA -> ActivityB -> ActivityC -> ActivityA

活动A:

Intent intentB = new Intent(this, ActivityB.class);
startActivityForResult(intentB, requestCode);

ActivityB:ActivityB会转发到

Intent intentC = new Intent(this, ActivityC.class);
intentC.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(intentC);
finish();

活动C:

setResult(resultCode);
finish();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多