【问题标题】:Update data fragment from another activity从另一个活动更新数据片段
【发布时间】:2015-11-06 11:20:12
【问题描述】:

这似乎很容易,但我无法找到解决方案,尽管我已经检查过: How to update Android fragment from activity? How to change fragment's textView's text from activity

我的问题是:

我有 4 节课:

  • MainActivity.java
  • HistoryFragment.java
  • ConversationDialog.java
  • CallActivity.java

在MainActivity.java中,它的内容是2个Fragment,包括HistoryFragment和ContactFragment。从 HistoryFragment 中,我调用 ConversationDialog 来显示对话框,输入到对话框并按 OK 打开 CallActivity。

现在,我希望当我从 CallActivity 按下时,我必须用新数据更新 HistoryFragment。

但经过研究,我做不到。

请帮我做这件事。

【问题讨论】:

  • 你能告诉我们你尝试了什么吗?那么也许有好心人会帮助你。
  • 谷歌startActivityForResult()!
  • @MuhammadBabar。我知道,但我已经从对话框开始活动并想更新片段中的数据,我认为它不同?
  • 从对话框开始的活动基本上是从伴随的活动开始的活动!
  • 将 OnBackPressed 中的值放入 CallActivity 中的共享首选项中,并获取上一个活动的 OnResume 中的值并将其设置为 fragmentHistory 管理器。

标签: java android android-activity fragment


【解决方案1】:

当您从 CallActivity 按下返回按钮时,将调用 MainActivity 的 onResume() 函数。这就是逻辑。

执行以下步骤,

1.在 HistoryFragment 中实现一个公共方法(即 updateContent())来更新您的内容。

2.从MainActivity的onResume()中获取HistoryFragment实例

FragmentManager fragmentManager = activity.getSupportFragmentManager();
HistoryFragment aFragment=fragmentManager.findFragmentByTag("Place the History fragment TAG here which you have used to load before");

3.获取实例后,通过实例调用相关方法。

aFragment.updateContent()

【讨论】:

    【解决方案2】:

    当启动 CallActivity 时使用 startActivityForResults 像:

    Intent intent = new Intent(this,  CallActivity.class);
    startActivityForResult(intent, 1);
    

    其中 1 是稍后将用于取回您请求的数据的请求代码。

    然后在 Call Activity 中的 onBackPress 函数中

    Intent intent = new Intent();
    intent.putExtra("id","value")
    setResult(RESULT_OK, intent);        
    finish();
    

    然后执行此操作以获取您在上一个 Activity 中的数据

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
         if(resultCode == RESULT_OK){
          String stredittext=data.getStringExtra("id");
      }
    } 
    

    使用“id”是您的value的标识符,即“value”。我认为现在您可以轻松完成将数据添加到历史记录的其余部分使用公共变量的片段。

    【讨论】:

    • 我试过了,没问题。但我认为您需要将“然后在您的通话活动中”编辑为“然后在通话活动中的 onBackPress 函数中”以便于了解。
    • 我有疑问,如果我从对话更改为活动。从 MainActivity 启动 SelectActivity 和从 SelectActivity 我启动 CallActivity 时我会做什么?我想在 CallActivity 中按下后更新 MainActivity 并且不再显示 SelectActivity!
    • 你为什么不把它作为一个新问题发布,以便让答案更清晰?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    相关资源
    最近更新 更多