我有一个RecyclerView
带有一堆自定义视图,可能会在一段时间后改变高度,因为它们包含ImageView
s,它们异步加载它们的图像。虽然我在RecyclerView
上致电forceLayout
,但ImageView
已使用RecyclerView
进行初始化,但setHasFixedSize(false)
仍未接受此布局更改。 ImageView
的所有容器父项都设置了android:layout_height="wrap_content"
。
如何让RecyclerView
更新其布局?好的' ol ListView
这不是问题。
答案 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。