2

场景:我有 n 个选项卡,每个选项卡都有自己的列表视图。我正在使用数组适配器来生成列表视图。传递给 arrayadaper 的数组具有对象数组。每个对象都有一个“菜单”和“菜单类型”。现在基于菜单类型,如果菜单类型是“菜单组”,我将使用不同的布局进行绘制并将背景设置为红色。

问题很简单.. 每当单击 listview 中的 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; 
    }

}

4

2 回答 2

2

isEnabled()在您的适配器中覆盖并返回false不应被视为交互式的任何位置(文档链接)。默认情况下,这会true为所有元素返回。

于 2012-12-24T17:27:44.073 回答
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
    }
});
于 2012-12-24T17:27:50.193 回答