我正试图找到一种使用方法 SectionIndexer
, 代替 AlphabetIndexer
。我感兴趣的是在节标题上使用字符串数组的元素而不是字母表。我无法使用节索引器找到任何示例代码。
这是一个示例代码 AlphabetIndexer
:
private AlphabetIndexer indexer;
indexer = new AlphabetIndexer(c, c.getColumnIndexOrThrow(
DbHelper.COUNTRIES_NAME),"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
是否有可能通过 stringArray
而不是“ABCDEFGHIJKLMNOPQRSTUVWXYZ”来 AlphabetIndexer
所以我可以代替“A”,“B”,......“Z”作为标题有“书”,“食物”,......在标题上?
如果不是最好的方法是什么?对使用的示例代码的任何引用 SectionIndexer
代替 AlphabetIndexer
也会有所帮助。
谢谢您的帮助。
TJ
您可以尝试编写自定义 ArrayAdapter
并且基本上返回一个“节标题”视图 getView(...)
标题应出现的位置的方法。
你还必须覆盖 getViewTypeCount ()
返回新类型视图的数量(在本例中为2)和 getItemViewType (int position)
返回当前位置的视图类型。
而且, onItemClickListener
应检查您点击的项目是否为部分标题。
这是我的自定义数组适配器:
public class ItemListAdapter extends ArrayAdapter<ModelItem>
{
private static final int TYPE_SECTION_HEADER = 0;
private static final int TYPE_LIST_ITEM = 1;
int mDefaultRowLayoutResID;
Context mContext;
LayoutInflater mInflater;
ArrayList<ModelItem> lItems;
public ItemListAdapter(Context context, int resource, ArrayList<ModelItem> items)
{
super(context, resource, items);
mContext = context;
mResource = resource;
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
lItems = items;
}
@Override
public ModelItem getItem(int position)
{
return lItems.get(position);
}
@Override
public int getCount()
{
return lItems.size();
}
@Override
public int getViewTypeCount()
{
return 2;
}
@Override
public int getItemViewType(int position)
{
ModelItem item = lItems.get(position);
if (item.isHeader())
{
return TYPE_SECTION_HEADER;
}
else
{
return TYPE_LIST_ITEM;
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
ModelItem item = getItem(position);
if (convertView == null)
{
if (item.isHeader())
{
convertView = mInflater.inflate(R.layout.row_item_section_header, null);
holder = new ViewHolder();
holder.title = (TextView)convertView.findViewById(R.id.list_header_title);
holder.subtitle = null;
convertView.setTag(holder);
}
else
{
convertView = mInflater.inflate(R.layout.row_item_default, null);
holder = new ViewHolder();
holder.title = (TextView)convertView.findViewById(R.id.row_item_title);
holder.subtitle = (TextView)convertView.findViewById(R.id.row_item_subtitle);
convertView.setTag(holder);
}
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.title.setText(item.getTitle());
if (holder.subtitle != null)
{
holder.subtitle.setText(item.getSubtitle());
}
return convertView;
}
private class ViewHolder
{
public TextView title;
public TextView subtitle;
public ImageView leftIcon;
public View rightControl;
}
}
这是row_item_default.xml文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/row_item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/row_item_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/row_item_title"
/>
</RelativeLayout>
这是row_item_section_header.xml:
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_header_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="?android:attr/listSeparatorTextViewStyle"
/>
ModelItem类是标题,副标题和布尔值的简单容器,用于判断它是否为节标题。
这不是编写此适配器的唯一方法,但我希望这会有所帮助。