场景:我有n个标签,每个标签都有自己的列表视图。我使用数组适配器来生成一个列表视图。传递给arrayadaper的数组是一个对象数组。每个对象都有一个"菜单"one_answers"菜单类型"。现在基于菜单类型,如果菜单类型是"menugroup",我将使用不同的布局并将背景设置为红色。
问题很简单…当点击在列表视图的菜单组行上时,什么都不会发生。换句话说,如何忽略在菜单组行中进行的单击。这只需要在onItemClick方法中捕获菜单行中单击的细节。你能给我指点一下下一步该怎么做吗?提前谢谢。
public class MyCustomAdapter extends ArrayAdapter<Menu> {
private ArrayList<Menu> menuItemList;
Context context;
LayoutInflater vi;
public MyCustomAdapter(Context context ,ArrayList<Menu> menu) {
super(context, 0, menu );
this.menuItemList = new ArrayList<Menu>();
this.menuItemList.addAll(menu);
this.context =context;
vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
private class ViewHolder {
TextView menuItem;
TextView menuGroup;
}
public int getItemViewType(int position) {
if (menuItemList.get(position).getMenuType().equals("menugroup"))
return 0;
return 1;
}
public int getViewTypeCount() {
return 2;
}
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
int type = getItemViewType(position);
if (convertView == null) {
holder = new ViewHolder();
switch (type) {
case 0:
convertView = vi.inflate(R.layout.group, null);
holder.menuItem = (TextView) convertView.findViewById(R.id.tvGroup);
convertView.setBackgroundColor(Color.RED);
break;
case 1:
convertView = vi.inflate(R.layout.item, null);
holder.menuItem = (TextView) convertView.findViewById(R.id.tvItem);
break;
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
switch (type) {
case 0:
holder.menuItem.setText(menuItemList.get(position).getItemName()) ;
convertView.setBackgroundColor(Color.RED);
break;
case 1:
holder.menuItem.setText(menuItemList.get(position).getItemName()) ;
break;
}
return convertView;
}
}
在适配器中覆盖isEnabled()
,并为任何不应被视为交互式的位置返回false
(文档链接)。默认情况下,它返回所有元素的true
。
从侦听器中使用适配器的getItemViewType()
。如果返回0,则不要在侦听器中执行任何操作。
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (parent.getAdapter().getItemViewType(position) == 0)
return;
// do something for non-menugroup clicks
}
});