【问题标题】:Update Recyclerview when posting a comment发表评论时更新 Recyclerview
【发布时间】:2016-10-04 10:39:46
【问题描述】:

希望您能在这方面提供帮助。

我有一个PostFragment,其中包含一个线程的所有帖子的RecyclerView。这个想法是让用户点击FAB,将他们带到NewPostActivity,允许他们回复。当我在NewPostActivity 中按“发布”时,如何更新PostFragment 中的适配器。

目前我在片段中尝试了onResume,但它不起作用。这是我单击“发布”按钮时的代码。

private void addPost() {

    String newPost = replaceHTMLTags(mPostMessage.getHtml());
    String threadID = PreferenceConnector.readString(getApplicationContext(),
            "threadID");
    String username = PreferenceConnector.readString(getApplicationContext(),
            "username");

    mDataFactory = new PostFeedDataFactory(this);

    mDataFactory.createNewPost(threadID, newPost, username,
            new PostFeedDataFactory.PostFeedDataFactoryCallback() {
                @Override
                public void onPostDataReceived(PostResponse response) {
                    Toast.makeText(getApplicationContext(), "Posted successfully",
                            Toast.LENGTH_LONG).show();
                    finish();
                }

                @Override
                public void onPostDataFailed(Exception exception) {
                    Toast.makeText(getApplicationContext(), exception.getMessage(),
                            Toast.LENGTH_LONG).show();
                    finish();

                }
            });
}

而我的onResume 基本上只是

@Override
public void onResume() {
    super.onResume();
    if (mAdapter != null) {
        mAdapter.notifyDataSetChanged();
    }
}

我尝试在此处阅读,但找不到任何适合此的内容。

提前致谢。

【问题讨论】:

  • 发布的数据是否插入到PostFragment中的同一个列表中?
  • 请分享您如何设置适配器和列表的代码。我没有看到列表更新为新数据。 onPostDataReceived 没有更新任何列表

标签: android android-fragments android-activity android-recyclerview notifydatasetchanged


【解决方案1】:

有一个选项可以在您的 Activity 中创建静态方法:

if (mAdapter != null) {
        mAdapter.notifyDataSetChanged();
    }

然后在finish()之前的PostFeedDataFactoryCallback()这两个方法中调用它。

此外,如果您将第二个类作为活动启动,您始终可以将其启动为startActivityForResult(),然后实现方法onActivityResult(),通知适配器进行更改。在这种情况下,您在每个 finish() 之前添加的内容是这样的:

setResult(Activity.RESULT_OK, your_data);

看这里的例子: https://tylenoly.wordpress.com/2010/10/27/how-to-finish-activity-with-results/

【讨论】:

  • mAdapter 属于不同的类,我该怎么做?
  • 这仍然让我感到困惑,这是我从未真正做过的事情之一,我无法理解它
【解决方案2】:

我没有看到您在适配器中添加新帖子的代码部分。 您必须 setItems 然后调用 notifyDatasetChanged 才能产生任何效果。

如果 PostFragment 位于不同于 NewPostActivity 的 ActivityA 中,那么您可以使用 PostFragment 生命周期通过检索所有帖子来刷新适配器,这是最简单(不是更有效)的解决方案。

【讨论】:

  • 但它会被添加,因为如果我离开片段然后返回它会添加到 recyclerView。我的 addPost 方法进行 API 调用,然后将其添加到数据库中。那么如何将它添加到适配器中呢?
  • 在 PostFragment onResume 中,您应该添加从数据库中检索帖子并将它们设置到适配器的代码。所以每次调用fragment onResume,你的recyclerview都会刷新到最新的状态。视图之间通信的另一种方式是 EventBus 库,但是将事件用于您可以在视图的生命周期中执行的操作是对库的过度使用。
【解决方案3】:

有很多方法可以做到这一点,但最有效的是事件总线。这是一个示例:https://github.com/greenrobot/EventBus
我建议您最好开始使用事件总线作为活动、片段和事件线程之间的通信手段来构建您的应用程序。这可能不是您正在寻找的答案,但绝对是一个更好的解决方案。

【讨论】:

    猜你喜欢
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多