有没有办法在没有完全重载的情况下更新一个RecyclerView元素的外观?

时间:2016-10-06 22:04:38

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

我正在制作一个包含post元素的主要RecyclerView“Feed”的应用。

您可以点击一条带您进入详细视图的帖子。

我选择将详细视图放在“透明”活动中,以便在单击详细视图时暂停当前活动并启动新活动。这意味着Feed活动不会丢失其状态,并且recyclelerview保持其位置,以便当用户单击时,活动/片段不需要重新加载。

在Feed的帖子和详细视图中,我都有可以点击的拇指按钮。当用户进入详细视图时,我传入拇指按钮的状态,并在onCreate()中初始化。当用户退出详细视图时,我需要更新主Feed中的拇指按钮的状态(以使它们保持同步),而无需刷新整个Recyclerview。 这需要我在recyclerview的一个项目中刷新数据集(并随后更新外观),而无需刷新/重新加载整个recyclerview。这可能吗?

我尝试通过更新我的适配器使用的数据集并调用notifyItemChanged(position)来做到这一点,但这不起作用。我被告知这个方法调用onBindViewHolder(然后调用我的绑定方法并更新视图)。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Here, I'm updating my mRecipes data set after returning from the detailed view

    if (requestCode == 0) {
        int adaptpos = Integer.parseInt(data.getStringExtra("adaptpos"));
        String likes = data.getStringExtra("likes");
        String favorites = data.getStringExtra("favorites");
        mRecipes[adaptpos].setLikes(likes);
        mRecipes[adaptpos].setFavorites(favorites);
        mAdapter.notifyDataSetChanged();
        mAdapter.notifyItemChanged(adaptpos);

    }
}

任何有关此事的帮助将不胜感激。如果所有其他方法都失败了,我可能只需要重新加载整个片段以反映状态的变化。

1 个答案:

答案 0 :(得分:0)

您可以使用DiffUtil来处理此方案,这是处理回收站视图项更新的简便方法,最近已添加到支持库中。

medium帖子解释了实施