2012-12-24 58 views
2

場景:我有n個選項卡,每個選項卡都有自己的listview。我正在使用陣列適配器來生成一個列表視圖。傳遞給arrayadaper的數組具有對象數組。每個對象都有一個「菜單」和「菜單類型」。現在基於菜單類型,如果菜單類型是「menugroup」,我將使用不同的佈局進行繪製,並將背景設置爲RED顏色。如何忽略在列表視圖中進行的點擊

問題很簡單..只要點擊是在菜單組列表視圖中沒有任何應該發生行所做的。換句話說,如何忽略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

覆蓋isEnabled()及不應被視爲任何交互位置(docs link)返回false。默認情況下,這將爲所有元素返回true

+0

這是爲BaseAdapter ..我使用arrayAdapter ..這將在ArrayAdapter中有用嗎? – user1822729

+0

'ArrayAdapter'是'BaseAdapter'的子類。他們都以同樣的方式工作。 – Devunwired

+0

完全感謝您的幫助..它的工作原理 – user1822729

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 
    } 
}); 
+0

你能指點我的任何示例代碼嗎? – user1822729

+0

@ user1822729我添加了一個例子。然而,'isEnabled()'解決方案看起來比我優越。 – user113215

+0

你的想法正在工作,但我想保持這個邏輯在適配器類,因此我用isEnable() – user1822729

相關問題