从android中的另一个活动返回时刷新活动内容

时间:2013-03-09 14:11:51

标签: android android-activity .refresh

我的应用是一个消息应用,它有一个执行收件箱功能的活动。因此,在我的收件箱中,我将在顶部列出未读消息并在底部读取消息。

因此,如果我点击未读消息,它将转移到显示所选特定消息的新活动,在我的数据库中,我将其标记为已读。因此,在单击返回时,当它移动到上一个活动时,此消息应显示在读取的消息中。但是,在我的情况下,它显示了旧的情况,即消息仍显示在未读之中。

我认为活动应该在返回时刷新,所以我尝试了一些刷新的方法,如:

1

public void onResume(Bundle s)
    {  // After a pause OR at startup
        super.onResume();
        this.onCreate(s);
    }

2

Intent intent = new Intent(this, msgdisplayActivity.class); //msgdisplayActivity is activity which display the selected message. 
//intent.putExtra("someData", "Here is some data");
startActivityForResult(intent, 1);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode==RESULT_OK){
        Intent refresh = new Intent(this, inboxlist.class); //inboxlist is activity which list the read and unread messages
        startActivity(refresh);
        this.finish();
    }
}

但两者都没有。 onResume()未被调用,另一个显示错误。

4 个答案:

答案 0 :(得分:0)

您可以将刷新版面代码放在一个方法中

e.g。

void populatedata()
{
    //your code to show data in listview or lables
    //if you are using listview, then you can write adapter.notifyDataSetChanged(); to refresh list
}

然后,您可以使用

Intent intent = new Intent(this, msgdisplayActivity.class); //msgdisplayActivity is activity which display the selected message. 
startActivityForResult(intent, 1);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
  if(resultCode==RESULT_OK){
    //call populatedatamethod
    populatedata();
  }
}

您可以在onCreate方法中使用相同的方法。

你能提供你的onCreate和onResume代码吗?这样我可以根据你的代码编辑我的答案吗?

onResume也在onActivityResult()之后调用,所以你也可以把你的代码放在那里

答案 1 :(得分:0)

由于其签名,您的onResume()方法永远不会被调用。

每当您想要覆盖方法时,最好使用@Override。如果您在代码中使用了@Override,那么您可能会指出要覆盖但不会成功的问题。

从您的观点来看1我建议您尝试更好地了解活动生命周期,因为在super.onCreate()内以及onResume()之后调用super.onResume()是,嗯,都错了。

您的第一个代码段应如下所示:

@Override
protected void onResume() {
    super.onResume();
    // do what you need to do if your activity resumes
}

但是你应该确保在onResume()被调用时理解。

关于您的onActivityResult()实施,它可能不是重新加载“收件箱”活动的最有效方法,但它应该有效。代码看起来很好,除了一个方面:在这个方法中,我不会调用super.onActivityResult(),因为它不是必需的,它不能提供有意义的东西。我从来没有这样做,这很好。所以也许可以摆脱这个调用,看看错误是否仍然存在。

如果是,请发布错误。

答案 2 :(得分:0)

您的代码片段 1 将在此处创建递归场景。阅读 Activity Lifecycle 了解更多详情。

如果您需要动态刷新数据,请将数据获取和显示在 UI 代码上部分移至您的 onResume 方法。这样每次活动恢复时都会获取数据。

否则,您可以使用 LiveData 从数据库中观察更改并自动更新 UI。

答案 3 :(得分:-1)

不同的设备以不同方式处理活动破坏。我找到的确定方法是将状态保存到app db并检索应用程序的焦点。