我有一个列表视图,每一行的高度为450dp,例如,在大多数情况下,listview最多只会同时呈现3个项目。
当列表视图最初加载时,每行只是一个带有一个“显示详细信息”按钮的图像(全部包含在相对布局中)。当用户点击按钮时,它通过调用setVisibility(View.GONE)隐藏当前具有图像和按钮的相对布局,并通过调用setVisibility(View.VISIBLE)显示另一个视图(LinearLayout)。
请记住,相对布局和线性布局都驻留在同一个xml中,该xml在Adapter.getView()中被填充,我只是在可见性方面切换其中之一。
问题在于,调用setVisibility(View.VISIBLE)后,线性布局不显示。 它成功地隐藏了相对布局,但线性布局没有出现。
只有在滚动列表视图上下以呈现新项目时,它才会出现。
我如何强制显示相对布局? 通过强制重绘? 我尝试过通过调用invalidate来实现,但它没有起作用。
我还尝试了requestLayout,但同样无效。
我还尝试了notifyDataSetChanged(),它没有起作用,而且我认为我不应该调用它,因为适配器中的数据没有更改,我只是隐藏和显示一个新视图。
请帮帮我。
当列表视图最初加载时,每行只是一个带有一个“显示详细信息”按钮的图像(全部包含在相对布局中)。当用户点击按钮时,它通过调用setVisibility(View.GONE)隐藏当前具有图像和按钮的相对布局,并通过调用setVisibility(View.VISIBLE)显示另一个视图(LinearLayout)。
请记住,相对布局和线性布局都驻留在同一个xml中,该xml在Adapter.getView()中被填充,我只是在可见性方面切换其中之一。
问题在于,调用setVisibility(View.VISIBLE)后,线性布局不显示。 它成功地隐藏了相对布局,但线性布局没有出现。
只有在滚动列表视图上下以呈现新项目时,它才会出现。
我如何强制显示相对布局? 通过强制重绘? 我尝试过通过调用invalidate来实现,但它没有起作用。
我还尝试了requestLayout,但同样无效。
我还尝试了notifyDataSetChanged(),它没有起作用,而且我认为我不应该调用它,因为适配器中的数据没有更改,我只是隐藏和显示一个新视图。
请帮帮我。
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;
}
}