gpt4 book ai didi

android - 无法使 AlphabetIndexer 工作

转载 作者:行者123 更新时间:2023-11-29 16:19:50 25 4
gpt4 key购买 nike

我正在尝试实现 AlphabetIndexer 来帮助用户滚动浏览我的列表,但是当我运行该应用程序时,列表上没有显示任何内容。谁能告诉我为什么?

注意:我没有在 Adapter 的构造函数中实例化 AlphabetIndexer,因为此时没有可用的 Cursor。

相关代码如下:

在 Activity 的 onCreate() 方法中:

mList = (ListView)findViewById(R.id.mylist);
mList.setOnItemClickListener(this);
mList.setFastScrollEnabled(true);
mAdapter = new MyAdapter(MyActivity.this, R.layout.layout_list_row, null, new String[] {MyColumns.NAME}, new int[] {R.id.itemname});
mList.setAdapter(mAdapter);
mList.setFastScrollEnabled(true);
doQuery();

doQuery() 是一种使用 AsyncQueryHandler 查询 Cursor 的方法。 AsyncQueryHandler 看起来像这样:

private final class MyQueryHandler extends AsyncQueryHandler {
public MyQueryHandler(Context context) {
super(context.getContentResolver());
}
@Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
if (!isFinishing()) {
if (mAdapter != null) {
mAdapter.changeCursor(cursor);
}
}
else {
cursor.close();
}
}

}

最后,我的 SimpleCursorAdapter。我已经删除了不需要的部分:

public class MyAdapter extends SimpleCursorAdapter implements View.OnClickListener {

private Cursor mCursor;
AlphabetIndexer alphaIndexer;


public MyAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
super(context, layout, c, from, to);
}

public int getPositionForSection(int section) {
return alphaIndexer.getPositionForSection(section);
}

public int getSectionForPosition(int position) {
return alphaIndexer.getSectionForPosition(position);
}

public Object[] getSections() {
return alphaIndexer.getSections();
}

public void onClick(View v) {
// ...
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
// ...
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
// ...
}

@Override
public void changeCursor(Cursor cursor) {
super.changeCursor(cursor);

if (MyActivity.this.mCursor != null) {
stopManagingCursor(MyActivity.this.mCursor);
MyActivity.this.mCursor.close();
MyActivity.this.mCursor = null;
mCursor = null;
}
MyActivity.this.mCursor = cursor;
startManagingCursor(MyActivity.this.mCursor);
mCursor = cursor;
alphaIndexer = new AlphabetIndexer(mCursor, mCursor.getColumnIndex(MyColumns.NAME), " ABCDEFGHIJKLMNOPQRSTUVWXYZ");
alphaIndexer.setCursor(mCursor);
}

@Override
public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
return doQuery();
}

最佳答案

如果您的列表不够长,无法保证快速滚动,Android 有时会隐藏快速滚动功能。不确定这是否是您的问题,但可能值得尝试向列表中添加一堆项目。

关于android - 无法使 AlphabetIndexer 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7717047/

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