如何忽略在列表视图行中所做的点击



场景:我有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
    }
});

相关内容

  • 没有找到相关文章

最新更新