Listview Section複数のタイトルおよびコンテンツ

13330 ワード

Listview Section 多个标题以及内容
日付ヘッダー部分のビューレイアウト:
view sourceprint?1 <?xml version=”1.0″ encoding=”utf-8″?>    

  

 <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”    

  

 android:orientation=”vertical” android:layout_width=”fill_parent”    

  

 android:layout_height=”10dip” android:background=”@drawable/section_background”>    

  

 <TextView android:id=”@+id/section_title”    

  

 android:layout_width=”fill_parent” android:layout_height=”match_parent” />    

  

 </LinearLayout>   

 

 
画像付きエントリレイアウト:
<?xml version=”1.0″ encoding=”utf-8″?>    

  

 <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”    

  

 android:layout_width=”fill_parent” android:layout_height=”wrap_content”    

  

android:orientation=”horizontal” >    

  

 <ImageView android:id=”@+id/image” android:src=”@drawable/p”    

  

 android:layout_width=”wrap_content” android:layout_height=”wrap_content” />    

  

 <TextView android:id=”@+id/title” android:layout_width=”wrap_content”    

  

 android:layout_height=”wrap_content” />    

  

 </LinearLayout>   

 
 
 
 
問題は、ListViewにタイトルエントリとコンテンツエントリがある方法です.
ここでは,設計モードにおけるIteratorモードを用いた.JavaコードにはIteratorの例があり、ArrayList、HashSetなどの異なるデータ構造オブジェクトを反復することができます.
 
ListElementはインタフェースです.
  • package com.easymorse.listview.customer;      
    
      
    
     import android.content.Context;    
    
      
    
     import android.view.LayoutInflater;    
    
      
    
    import android.view.View;    
    
      
    
        
    
      
    
     public interface ListElement {    
    
      
    
     public int getLayoutId();    
    
      
    
         
    
      
    
     public boolean isClickable();    
    
      
    
       
    
      
    
     public View getViewForListElement(LayoutInflater layoutInflater,    
    
      
    
     Context context, View view);    
    
      
    
    }   
    
      

     

  • 次のようになります.
  • getLayoutId()は、レイアウトの値を返します.
  • isClickable()はクリック可能かどうかを返します.
  • getView ForListElement()は、ビューオブジェクトを返します.

  • このインタフェースには2つの実装があります.
  • SectionListElementは、タイトルエントリを実装するために使用される.
  • ContentListElementは、コンテンツエントリを実装するために使用される.

  • SectionListElementコードを参照:
  • package com.easymorse.listview.customer;      
    
      
    
     import android.content.Context;    
    
      
    
     import android.view.LayoutInflater;    
    
      
    
     import android.view.View;    
    
      
    
     import android.widget.LinearLayout;    
    
      
    
     import android.widget.TextView;    
    
      
    
        
    
      
    
     public class SectionListElement implements ListElement {    
    
      
    
        
    
      
    
     private String text;    
    
         
    
      
    
    public void setText(String text) {    
    
      
    
     this.text = text;    
    
      
    
     }    
    
         
    
      
    
     @Override   
    
      
    
     public int getLayoutId() {    
    
      
    
     return R.layout.section;    
    
      
    
     }    
    
         
    
      
    
     @Override   
    
      
    
     public boolean isClickable() {    
    
      
    
     return false;    
    
      
    
     }       
    
      
    
     @Override   
    
      
    
    public View getViewForListElement(LayoutInflater layoutInflater,    
    
      
    
     Context context, View view) {    
    
      
    
     LinearLayout layout = (LinearLayout) layoutInflater.inflate(getLayoutId(), null);    
    
      
    
    TextView textView=(TextView) layout.findViewById(R.id.section_title);    
    
      
    
     textView.setText(text);    
    
      
    
     return layout;    
    
      
    
    }    
    
      
    
          
    
      
    
     }   
    
     

     

  • ContentListElementコードを参照:
     
    ListViewにはListAdapterの実装が必要です.ここではBaseAdapterを直接統合して実現する.ListViewに渡してリストを生成します.コード:
    public class CustomerListAdapter extends BaseAdapter {    
    
    private Context context;    
    
      
    
        
    
      
    
     protected ArrayList<ListElement> resultList;    
    
      
    
       
    
      
    
     private LayoutInflater layoutInflater;    
    
      
    
        
    
      
    
     public CustomerListAdapter(Context context) {    
    
      
    
     super();    
    
      
    
     this.context = context;    
    
     this.layoutInflater = (LayoutInflater) context    
    
      
    
     .getSystemService(“layout_inflater”);    
    
      
    
     this.resultList = new ArrayList<ListElement>();    
    
      
    
     }    
    
      
    
       
    
      
    
    @Override   
    
      
    
     public int getCount() {    
    
      
    
     return this.resultList.size();    
    
      
    
     }    
    
      
    
          
    
    @Override   
    
      
    
     public Object getItem(int position) {    
    
      
    
     return this.resultList.get(position);    
    
      
    
     }    
    
      
    
          
    
      
    
     @Override   
    
      
    
    public long getItemId(int position) {    
    
      
    
     return position;    
    
      
    
    }    
    
      
    
          
    
      
    
     @Override   
    
      
    
     public View getView(int position, View view, ViewGroup parent) {    
    
      
    
     return this.resultList.get(position).getViewForListElement(    
    
      
    
     layoutInflater, context, view);    
    
      
    
    }    
    
      
    
         
    
      
    
     public void addList(List<ListElement> elements) {    
    
      
    
     this.resultList.addAll(elements);    
    
      
    
     }    
    
      
    
          
    
      
    
     @Override   
    
      
    
     public boolean isEnabled(int position) {    
    
      
    
     return this.resultList.get(position).isClickable();    
    
     }    
    
      
    
       
    
     public void addSectionHeaderItem(String text) {    
    
      
    
     SectionListElement element = new SectionListElement();    
    
      
    
     element.setText(text);    
    
      
    
     this.resultList.add(element);    
    
      
    
     }    
    
      
    
    }   

     
      
    ActivityでCustomerListAdapterを作成し、そのコードセクションを設定します.
    CustomerListAdapter adapter = new CustomerListAdapter(this);    
    
      
    
      
    
     adapter.addSectionHeaderItem(“2002-3-1″);    
    
      
    
        
    
      
    
     ArrayList<ListElement> elements = new ArrayList<ListElement>();    
    
      
    
     for (int i = 0; i < 5; i++) {    
    
      
    
    ContentListElement element = new ContentListElement();    
    
      
    
     element.setTitle(“     ” + (i+1) + “ ”);    
    
      
    
    elements.add(element);    
    
      
    
    }    
    
      
    
     adapter.addList(elements);    
    
      
    
         
    
      
    
    adapter.addSectionHeaderItem(“2002-2-2″);    
    
      
    
          
    
      
    
     elements = new ArrayList<ListElement>();    
    
      
    
     for (int i = 0; i < 3; i++) {    
    
      
    
    ContentListElement element = new ContentListElement();    
    
      
    
     element.setTitle(“    ” + (i+1) + “ ”);    
    
      
    
    elements.add(element);    
    
      
    
    }    
    
      
    
     adapter.addList(elements);    
    
      
    
         
    
      
    
     this.setListAdapter(adapter);   

     
      
    ここでListActivityは、ListActivityを継承する2つのことに注意する必要があります.またlayoutでは
    ListViewのidはシステムで持参する