【问题标题】:After Android onResume ListView is emptyAndroid onResume ListView 为空后
【发布时间】:2011-04-12 23:36:14
【问题描述】:

我有一个 ListView,我正在尝试使用 SQL Lite 数据库中的数据填充它的 onResume。在恢复期间,我添加了一个单击侦听器并重新填充列表视图。下面是 onResume、populateListView() 和 onPause 方法。完整的source code is available on GitHub

onResume:

@Override
protected void onResume() {
    IntentFilter filter = new IntentFilter();
    filter.addAction(TalkServerIntent.INTENT_NEW_MESSAGES.toString());
    registerReceiver(receiver, filter);

    setContentView(R.layout.main);

    talkListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parentView, View childView,
                            int position, long id) {
            GeoCamTalkMessage msg = adapter.getTalkMessage(position);
            if (msg.hasAudio()) {
                try {
                    UIUtils.playAudio(getApplicationContext(), msg, player,
                            siteAuth);
                } catch (Exception e) {
                    UIUtils.displayException(getApplicationContext(), e,
                            "Cannot retrieve audio");
                }
            }
        }
    });

    populateListView();
    super.onResume();
}

填充列表视图:

private void populateListView() {
    try {
        talkMessages = messageStore.getAllMessages();
    } catch (Exception e) {
        Log.i("Talk", "Error:" + e.getMessage());
    }

    if (talkMessages != null) {
        adapter.setTalkMessages(talkMessages);
        talkListView.setAdapter(adapter);
    }
}

我没有在 onPause 上做任何特别的事情,但由于值存储在数据库中,我认为我不必这样做。

暂停

@Override
protected void onPause() {
    unregisterReceiver(receiver);
    super.onPause();
}

我做错了什么导致 ListView 无法在 onResume 上刷新?

【问题讨论】:

  • @ahsteele:您是否尝试过调试或遵循 logcat?似乎最可能的原因是talkMessages = messageStore.getAllMessages();正在返回 null,因此永远不会设置适配器。
  • @MisterSquonk 这就是我的想法,在发布之前通过调试器中的应用程序运行。我仔细观察了 LogCat,没有看到任何表明存在问题的东西。但我知道messageStore.getAllMessages()肯定有消息返回。
  • @ahsteele:长镜头 - 我注意到您倾向于在覆盖方法的末尾调用“超级”方法(例如,onResume())。我看到的大多数代码往往在一开始就有这些(除了少数例外)。 RoboActivity 是否有可能在其 onResume() 方法中做一些可能产生负面影响的事情?正如我所说,这似乎不太可能,而且只是一个远大的目标。
  • @ahsteele:哦,好吧,值得一试。我能看到的唯一值得一看的是你可以尝试移动 setContentView(R.layout.main);到您的 onCreate() 方法。似乎每次都在 onResume 中设置它可能会导致问题???再次,也许是另一个远景。
  • @MisterSquonk 成功了。你应该把你的评论变成一个答案,这样我就可以投票给你并给你一些分数。 ;)

标签: android listview android-activity onresume onpause


【解决方案1】:

您可以尝试将 setContentView(R.layout.main); 移动到您的 onCreate() 方法中。

每次都将其设置为onResume() 可能会导致问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2023-03-09
    相关资源
    最近更新 更多