我试图通过在 list_item 中隐藏一个未隐藏的线性布局来让列表视图的下部向下滑动。问题是视图似乎在 LayoutAdapter 中被重用,因此更改不仅仅影响我打算应用它的视图。相反,它显示在视图被重用的任何地方。如何将下拉菜单限制为我请求下拉菜单的视图?通过下拉我的意思是取消隐藏线性布局。
问问题
97 次
1 回答
0
列表中总会有用户可以看到的尽可能多的视图。当用户滚动时,超出视图的视图将被重用以显示用户滚动到的新列表数据。您需要在重绘列表项时重置它们的状态。
将布尔变量“扩展”添加到存储列表数据的对象。(您添加到 ArrayAdapter 的对象)。当用户展开listItem中的LinearLayout时,设置expanded = true。
public class MyListItem
{
public boolean expanded = false;
// data you are trying to display to the user goes here
// ...
}
然后在列表适配器的 getView 方法中执行此操作
public class MyListAdapter extends ArrayAdapter<MyListItem>
{
public MyListAdapter (Context context, ArrayList<AudioPlaylist> objects)
{
super(context, R.layout.list_item, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LinearLayout rowLayout;
MyListItem item = this.getItem(position);
if (convertView == null)
{
rowLayout = (LinearLayout) LayoutInflater.from(this.getContext()).inflate(R.layout.list_item, parent, false);
}
else
{
rowLayout = (LinearLayout) convertView;
}
//set the textviews, etc that you need to display the data with
//...
LinearLayout expanded = rowLayout.findViewById(R.id.expanded_area_id);
if (item.expanded)
{
//show the expanded area
expanded.setVisibility(View.VISIBLE);
}
else
{
//hide the area
expanded.setVisibility(View.GONE);
}
return rowLayout;
}
}
确保你的 list_item.xml 有一个 LinearLayout 包裹整个东西,否则你会得到一个演员异常。
希望有帮助...
于 2012-11-29T17:02:03.887 回答