gpt4 book ai didi

Android:如何使用 SectionIndexer

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:03:07 30 4
gpt4 key购买 nike

我正在尝试找到一种方法来使用 SectionIndexer,而不是 AlphabetIndexer。我感兴趣的是在节标题而不是字母表中包含字符串数组的元素。我无法使用节索引器找到任何示例代码。

这是 AlphabetIndexer 的示例代码:

private AlphabetIndexer indexer;
indexer = new AlphabetIndexer(c, c.getColumnIndexOrThrow(
DbHelper.COUNTRIES_NAME),"ABCDEFGHIJKLMNOPQRSTUVWXYZ");

是否可以将 stringArray 而不是“ABCDEFGHIJKLMNOPQRSTUVWXYZ”传递给 AlphabetIndexer,这样我就可以例如代替“A”、“B”... “Z”作为标题在标题上有“Book”、“Food”、...?

如果不是,最好的方法是什么?任何对使用 SectionIndexer 而不是 AlphabetIndexer 的示例代码的引用也会有所帮助。

感谢您的帮助。田杰

最佳答案

您可以尝试编写自定义 ArrayAdapter 并在 getView(...) 方法中基本上返回一个“section header” View ,用于 header 应该出现的位置.

您还必须覆盖 getViewTypeCount () 以返回新类型 View 的数量(在本例中为 2)和 getItemViewType (int position) 以返回当前位置的 View 类型。

此外,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 类是标题、副标题和一个 bool 值的简单容器,用于判断它是否是节标题。

这不是编写此适配器的唯一方法,但我希望这对您有所帮助。

关于Android:如何使用 SectionIndexer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6861339/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com