我有一个问题,我需要在一个列表项中显示两个文本视图。
一个视图显示该项目,单击该项目将打开该项目。 另一个视图是一个加号图标,用它的子项扩展列表。
我摸不着头脑,但找不到方法来检测列表视图中选择了哪个视图。
不知怎的,我想出了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;
}
}
`
drawer_list_item: `
<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);
`
答案 0 :(得分:1)
您可以使用ExpandableListView来显示它自己的下拉指示符。您也可以更改您选择的图标。它只需要一个adapter,您可以单独填充child和parent。 如果要求与此有所不同,请提及我们可以讨论。
和
如果您不想使用此功能,可以使用单个自定义适配器执行此操作,并为其添加自定义布局。填充后,将单击侦听器添加到加号按钮,然后onClick处理第二个文本项的可见性。
OR
如果您想要多层列表,可能需要检查this项目。我没试过,但我想这值得一试。默认的ExpanadableListView仅限于支持2个级别。你可以自定义它以支持更多级别,但它会更加复杂。
答案 1 :(得分:0)