1

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

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

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

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

4 回答 4

0

您可以将刷新布局代码放在一种方法中

例如

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() 之后调用,因此您也可以将代码放在那里

于 2013-03-09T15:01:23.727 回答
0

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

@Override每当您打算覆盖方法时使用它是一个好主意。如果您@Override在代码中使用过,您会被指出您打算覆盖但没有成功的问题。

从您的观点来看,1我建议您尝试更好地理解 Activity 生命周期,因为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(),因为它不是必需的,它不能提供有意义的东西。我从不这样做,而且效果很好。所以也许摆脱这个调用,看看错误是否仍然发生。

如果是,请发布错误。

于 2013-03-10T13:35:26.530 回答
0

您的代码片段 1 将在这里创建一个递归场景。阅读有关活动生命周期的更多详细信息。

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

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

于 2021-07-09T02:12:12.517 回答
-1

different devices handle activity destruction differently. the sure method i've found is saving state to app db and retrieving on focus of app.

于 2013-03-09T14:17:43.820 回答