0

我试图通过在 list_item 中隐藏一个未隐藏的线性布局来让列表视图的下部向下滑动。问题是视图似乎在 LayoutAdapter 中被重用,因此更改不仅仅影响我打算应用它的视图。相反,它显示在视图被重用的任何地方。如何将下拉菜单限制为我请求下拉菜单的视图?通过下拉我的意思是取消隐藏线性布局。

4

1 回答 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 回答