2010-09-29 61 views
4

我想用不同類型的項目創建列表。他們應該調用不同的意圖或做其他事情(顯示地圖等)。它應該像聯繫人詳細信息一樣。項目和操作的數量是預定義的。如何使用不同的元素和操作創建列表?

conact dteails

如何優雅地達到這種效果呢?我不需要確切的代碼,但需要查看指南和信息。任何幫助將不勝感激:)


UPDATE:

通過「這樣的效果:」我的意思是創建不同類型的項目(onClickListener,佈局)的列表。在上圖中,您可以看到您與各種選項有聯繫:撥打電話,發送電子郵件,聊天,查看谷歌地圖等。所有這些選項都按列表分組。

我想知道是否可以通過xml佈局來實現,而不需要定義自定義的Adapter類。我也想用eg添加一些靜態標題行。分類名稱。

+0

你不清楚什麼是「這種效應」,你不清楚。 – CommonsWare 2010-09-29 22:07:28

+0

我已經更新了我的問題來解釋我的意思是「這種效應」。希望這可以幫助你;) – pixel 2010-10-04 09:57:43

回答

3

我看到實現這一目標的唯一方法就是確實創建一個自定義適配器類。 我用這個來創建一個文件瀏覽器,根據不同的操作選擇的項目是文件或文件夾。

基本上,您需要創建一個擴展ArrayAdapter的自定義適配器(如果所有項目都從同一個類繼承,則可以使用其他基類)。下面是一個示例代碼:

public class MyCustomAdapter extends ArrayAdapter<Object> { 


    public MyCustomAdapter(Context context, int textViewResourceId, 
      ArrayList<Object> objects) { 
     super(context, textViewResourceId, objects); 
     mList = objects; 
    } 


    public View getView(int position, View convertView, ViewGroup parent) { 
     Object obj = mList.get(position); 
     View v = convertView; 
     LayoutInflater vi = (LayoutInflater) mContext 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 


     if (obj.getClass().isAssignableFrom(MyClass1.class)){ 
      v = vi.inflate(R.layout.myclass1_item_layout, null); 
      setupViewClass1(obj,v); 
     } else if (obj.getClass().isAssignableFrom(MyClass2.class)){ 
      v = vi.inflate(R.layout.myclass2_item_layout, null); 
      setupViewClass2(obj,v); 
     } 

     return v; 
    } 

    private void setupViewClass1 (Object obj, View v){ 
     // setup the content of your view (labels, images, ...) 
    } 

    private void setupViewClass2 (Object obj, View v){ 
     // setup the content of your view (labels, images, ...) 
    } 

    private ArrayList<Object> mList; 

} 

然後,你需要添加一個OnItemClickListener以及一個OnCreateContextMenuListener處理click和長按事件清單上,再使上班級的對象的過濾器。