2012-04-17 11 views
-1

私はListViewに実装されているデータベースを使用しています。
ListViewを分割し、ヘッダー(区切り記号)を追加します。私が意味することは、私には多くの都市があり、私はセパレータを使って国によってそれらをグループ化したいと思います。ここ
は、私が思うクラスは、あるヘッダとは何かを持っている:ListViewにヘッダーを表示

String[] adobe_products = getResources().getStringArray(R.array.adobe_products); 

     mAdapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, adobe_products); 
     // Binding Array to ListAdapter 
     this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, adobe_products)); 

     ListView lv = getListView(); 

     // listening to single list item on click 
     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

      /* // selected item 
       String product = ((TextView) view).getText().toString(); 

       // Launching new Activity on selecting single List Item 
       Intent i = new Intent(getApplicationContext(), SingleListItem.class); 
       // sending data to new activity 
       i.putExtra("product", product); 
       startActivity(i);*/ 
+1

参照:http://stackoverflow.com/questions/5148376/separators-in-listview – Klaasvaak

答えて

2

セパレータは、基本的にはカスタムリストアイテムです。アダプターをオーバーライドして、ヘッダーを必要とする無効なリスト項目を戻す必要があります。セパレーターのため、2を返すために

  • オーバーライドgetViewTypeCount()と:あなた例えば

    、あなたは正しい位置に文字列配列にセパレータを追加し、カスタムアダプタに以下の調整を作ることができますリストアイテム

  • 通常のリストアイテムの場合は0、セパレータの場合は1を返すgetItemViewType()をオーバーライドします。
  • getView()をオーバーライドして適切な行を作成してバインドします。
  • areAllItemsEnabled()をオーバーライドし、falseを返します。
  • isEnabled()をオーバーライドし、位置がセパレータの場合はfalseを返します。

次に、ヘッダー項目のみの個別のリストを作成し、このようなメソッドを作成して、上記のすべてのメソッドの項目タイプを確認します。

public Boolean isSeparator(int position) { 
    if (separatorList.contains(getItem(position)) { 
     return true; 
    } else { 
     return false; 
    } 
} 
関連する問題