-1

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);*/
4

1 に答える 1

2

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

インスタンスの場合、文字列配列の適切な位置に区切り記号を追加し、カスタム アダプターに次の調整を行うことができます。

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

それを行う 1 つの方法は、ヘッダー アイテムのみの別のリストを用意し、このようなメソッドを作成して、上記のすべてのメソッドのアイテム タイプをチェックすることです。

public Boolean isSeparator(int position) {
    if (separatorList.contains(getItem(position)) {
        return true;
    } else {
        return false;
    }
}
于 2012-04-17T14:25:13.903 に答える