如何使RecyclerView更新其布局?

时间:2014-08-14 11:23:23

标签: android android-recyclerview

我有一个RecyclerView带有一堆自定义视图,可能会在一段时间后改变高度,因为它们包含ImageView s,它们异步加载它们的图像。虽然我在RecyclerView上致电forceLayout,但ImageView已使用RecyclerView进行初始化,但setHasFixedSize(false)仍未接受此布局更改。 ImageView的所有容器父项都设置了android:layout_height="wrap_content"

如何让RecyclerView更新其布局?好的' ol ListView这不是问题。

5 个答案:

答案 0 :(得分:21)

如果您的所有图片同时更改,则可以使用notifyDataSetChanged中的Adapter RecyclerView;如果只有其中一项更改,则notifyItemChanged(int position)可以使用RecyclerView。这将告诉View重新绑定特定的{{1}}。

答案 1 :(得分:10)

谷歌终于在support library v23.2修复此问题。使用SDK Manager更新支持存储库后,通过在build.gradle中更新此行来修复问题:

compile 'com.android.support:recyclerview-v7:23.2.0'

答案 2 :(得分:5)

MAIN THREAD 调用notifyDataSetChanged()的{​​{1}}或notifyItemChanged(int position)方法。从RecyclerView.Adapter调用它可能会导致主线程不更新AsyncTask。在activity / fragment中使用回调方法作为监听器最方便,并由ImageView中的AsyncTask调用

答案 3 :(得分:2)

int wantedPosition = 25; // Whatever position you're looking for
int firstPosition = linearLayoutManager.findFirstVisibleItemPosition(); // This is the same as child #0
int wantedChild = wantedPosition - firstPosition;

if (wantedChild < 0 || wantedChild >= linearLayoutManager.getChildCount()) {
    Log.w(TAG, "Unable to get view for desired position, because it's not being displayed on screen.");
    return;
}

View wantedView = linearLayoutManager.getChildAt(wantedChild);
mlayoutOver =(LinearLayout)wantedView.findViewById(R.id.layout_over);
mlayoutPopup = (LinearLayout)wantedView.findViewById(R.id.layout_popup);

mlayoutOver.setVisibility(View.INVISIBLE);
mlayoutPopup.setVisibility(View.VISIBLE);

此代码适用于我。

答案 4 :(得分:0)

我遇到了同样的问题,我只为ImageView设置了固定宽度和高度。试试看,看看你得到了什么。您也可以使用lib,我使用Square Picasso,我使用了RecyclerView。