-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。

然后一种方法是创建一个仅包含标题项的单独列表,然后创建一个这样的方法来检查上述所有方法的项类型。

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