如何忽略listview行中的单击

时间:2012-12-24 17:22:49

标签: android android-layout onitemclicklistener onitemclick

场景:我有多个标签,每个标签都有自己的列表视图。我正在使用数组适配器生成列表视图。传递给arrayadaper的数组包含对象数组。每个对象都有一个"菜单"和"菜单类型" 。现在根据菜单类型,如果菜单类型是" menugroup"我将使用不同的布局绘制并将背景设置为RED颜色。

问题很简单..每当在listview中对menugroup行进行点击时,什么都不应该发生。换句话说,如何忽略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; 
    }

}

2 个答案:

答案 0 :(得分:2)

覆盖适配器中的isEnabled()并返回false以查找任何不应被视为交互式的位置(docs link)。默认情况下,这会为所有元素返回true

答案 1 :(得分:0)

使用来自听众的适配器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
    }
});