例如,我有一个列表视图,列表视图中的每一行的高度为 450dp,因此在大多数情况下,列表视图将同时呈现最多 3 个项目。
最初加载列表视图时,每一行只是一个带有“显示详细信息”按钮的图像(全部包含在相对布局中)当用户单击按钮时,它会隐藏当前具有图像和按钮的相对布局通过调用 setVisibility(View.GONE),并通过调用 setVisibility(View.VISIBLE) 显示另一个视图 (LinearLayout)
请记住,相对布局和线性布局都位于在 Adapter.getView() 中膨胀的同一个 xml 中,我只是在可见性方面切换另一个。
问题是,在线性布局上调用 setVisibility(View.VISIBLE) 后,它不显示。它确实成功隐藏了相对布局,但没有出现线性布局。
它仅在需要通过上下滚动列表视图来呈现列表视图中的新项目之后出现。
如何强制显示相对布局?通过强制重绘?我通过调用无效尝试过,它不起作用。
我也试过requestLayout,但同样没用。
我也尝试了 notifyDataSetChanged(),它没有用,我认为无论如何我都不应该调用它,因为适配器中的数据没有任何变化,我只是简单地隐藏并显示一个新视图。
请帮忙
编辑:基于butcode的帮助,但没有用
for(int i=start, j=list.getLastVisiblePosition();i<=j;i++) {
if(list.getItemAtPosition(vh.position)==list.getItemAtPosition(i)){
final View view = list.getChildAt(i-start);
final int index = i;
view.requestLayout();
lv.invalidateChild(view, new Rect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom()));
runOnUiThread(new Runnable() {
@Override
public void run(){
//lv.invalidateChild(view, new Rect(view.getLeft(),
//view.getTop(), view.getRight(), view.getBottom()));
lv.requestChildRectangleOnScreen(view, new Rect(view.getLeft(),
view.getTop(), view.getRight(), view.getBottom()), false);
view.requestLayout();
list.getAdapter().getView(index, view, list);
}
});
break;
}
}