【问题标题】:Display multiple views with merge adpter in android list view在 android 列表视图中使用合并适配器显示多个视图
【发布时间】:2015-02-18 08:49:21
【问题描述】:

我有一个问题需要在一个列表项中显示两个文本视图。

一个视图显示该项目,单击哪个视图会打开该项目。 另一个视图是一个加号图标,扩展列表及其子项。

我经常摸不着头脑,但找不到检测在列表视图中选择了哪个视图的方法。

不知何故,我想出了MergeAdapter,我跟着它添加了两个适配器。 第一个适配器显示实际标题,而另一个只显示一个加号图标。

但列表只显示第一个文本视图,而不是加号图标。

我还需要在MergeAdapter 中显示这两个视图吗?

显示标题,点击它应该打开选定的标题页

`

public class TitleAdapter extends BaseAdapter {

    private List<Title> navItems;
    private LayoutInflater layoutInflater;

    public TitleAdapter(Context context, List<Title> navItems) {
        this.layoutInflater = LayoutInflater.from(context);
        this.navItems = navItems;       
    }
    @Override
    public int getCount() {
        return navItems.size();
    }

    @Override
    public Object getItem(int position) {
        return navItems.get(position);
    }

    @Override
    public long getItemId(int position) {
        return navItems.get(position).getTitleID();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;

        TextView textView = null;

        if(convertView == null) {
            view = layoutInflater.inflate(R.layout.drawer_list_item, parent, false);

        } else {
            view = convertView;
        }

        textView = (TextView) view.findViewById(R.id.textView);

        Title item = (Title)getItem(position);

        textView.setText(item.getTitle());

        return view;
    }
}

`

显示 + 图标,单击它应在列表中添加新条目,即所选标题的子项

`

public class ExpandAdapter extends BaseAdapter {

    private int items;
    private LayoutInflater layoutInflater;

    public ExpandAdapter(Context context, int items) {
        this.layoutInflater = LayoutInflater.from(context);
        this.items = items;

    }
    @Override
    public int getCount() {
        return items;
    }

    @Override
    public Object getItem(int position) {
        return "+";
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;

        if(convertView == null) {
            view = layoutInflater.inflate(R.layout.drawer_list_item2, parent, false);

        } else {
            view = convertView;
        }

        return view;
    }
}

`

抽屉列表项: `

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/textView"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:textColor="@color/dark_grey"
          android:textSize="20sp"
          android:textStyle="normal"
          style="?android:attr/listSeparatorTextViewStyle"
          android:text="Hi" />

`

drawer_list_item2:

`

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/expandBtn"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:textColor="@color/dark_grey"
          android:textSize="20sp"
          android:textStyle="normal"
          style="?android:attr/listSeparatorTextViewStyle"
          android:text="+" />

`

但我看不到加号图标!

我在MergeAdapter 中添加了这样的:

`

MergeAdapter m = new MergeAdapter();        
TitleAdapter t = new TitleAdapter(this, navItems, hasChild);
ExpandAdapter e = new ExpandAdapter(this, navItems.size());
m.addAdapter(t);
m.addAdapter(e);

`

【问题讨论】:

  • 你能分享你的示例代码吗?

标签: android android-listview view


【解决方案1】:

您可以使用ExpandableListView,它会显示一个自己的下拉指示器。您也可以更改您选择的图标。它只需要一个adapter,您可以分别填充childparent。 如果要求与此有所不同,请提及我们可以讨论。

如果您不想使用它,您可以使用单个自定义适配器并为其添加自定义布局。填充后向加号按钮添加点击监听器,onClick 处理第二个文本项的可见性。

如果您想要多层列表,您可能需要查看this 项目。我没试过,但我想值得一试。默认的 ExpanadableListView 非常有限,仅支持 2 个级别。您可以对其进行自定义以使其支持更多级别,但这会更加复杂。

【讨论】:

  • 在我的情况下,当用户按下“+”图标时,孩子很多,比如 100 多岁,将它们放在同一个列表中。在这种情况下,我需要重新绘制列表。孩子们也可以有更多的孩子。那么你认为Expnadable ListView 能做到这一切吗?
  • 检查上面答案中的最后一个选项,但这将是一个复杂的选项。
  • 子项太多无法嵌套,我需要在+触摸时重新填充列表。我认为树视图等在这种情况下不起作用。
【解决方案2】:

ExpandableListView 的最佳示例演示。

https://github.com/idunnololz/AnimatedExpandableListView

【讨论】:

    猜你喜欢
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多