我通常倾向于使用POJO定义我的应用程序的模型层,例如文章,评论等.
我准备在我的一个ListViews的适配器中实现AlphabetIndexer.现在这个适配器接受一个文章集合,我通常从我的包装器中获取SQLiteDatabase.
AlphabetIndexer构造函数的签名如下:
public AlphabetIndexer (Cursor cursor, int sortedColumnIndex, CharSequence alphabet)
Run Code Online (Sandbox Code Playgroud)
由于这不接受Collection或类似的东西,只是一个Cursor,它让我想知道:也许我不应该为我的模型创建对象,只是使用从数据库返回的Cursors?
所以问题是,我猜:我应该怎么做,用POJO的集合表示数据,或者只是在我的应用程序中使用游标?
有什么输入?
我有一个ListView与fastScrollAlwaysVisible和fastScrollEnabled均设置为true.实现SectionIndexer到我Adapter和AlphabetIndexer我之后,fast scroll thumb当我滚动时,我的意志消失,然后在我到达列表的顶部或底部时重新出现.对于为什么会这样,我很无能为力.我之前没有经历过.
以下所有内容都有效AlphabetIndexer.我的问题是为什么我的快速滚动拇指在我滚动时消失了,我怎么能阻止它消失?
无论是否fast scroll是始终可见无所谓.每当fast scroll可见时,fast scroll thumb它就不存在,它就会消失,这就是我的问题.此外,当我删除像我打算AlphabetIndexer的fast scroll thumb作品.一切都成功地运作Activity,但当我加载我ListView的Fragment东西最终像我解释.
这是我Adapter的意思ListView:
private class AlbumsAdapter extends SimpleCursorAdapter implements
SectionIndexer {
private AlphabetIndexer mIndexer;
// I have to override this because I'm using a `LoaderManager`
@Override
public Cursor swapCursor(Cursor cursor) { …Run Code Online (Sandbox Code Playgroud) 我想在最新的音乐应用程序中模拟功能,即弹出的漂亮的小光标,允许人们快速滚动到他们正在寻找的艺术家/专辑/曲目:

有没有一种方法可以ListView在Android SDK中启用这样的功能?
我试图找到一种方法来使用SectionIndexer,而不是AlphabetIndexer.我感兴趣的是在节标题上使用字符串数组的元素而不是字母表.我无法使用节索引器找到任何示例代码.
以下是一个示例代码AlphabetIndexer:
private AlphabetIndexer indexer;
indexer = new AlphabetIndexer(c, c.getColumnIndexOrThrow(
DbHelper.COUNTRIES_NAME),"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
Run Code Online (Sandbox Code Playgroud)
是否可以通过stringArray代替"ABCDEFGHIJKLMNOPQRSTUVWXYZ"来AlphabetIndexer代替"A","B",......"Z"作为标题有"书","食物",......头?
如果不是最好的方法是什么?对SectionIndexer代替使用的示例代码的任何引用AlphabetIndexer也会有所帮助.
谢谢您的帮助.TJ
有人可以告诉我如何使用AlphabetIndexer自定义适配器使用getView?我使用标准适配器,但不知道如何使用自定义适配器实现它.
谢谢
我正在使用自定义CursorAdapter从SQLite数据库中获取数据并在列表视图中显示它.该数据库包含2列,大约8.000行.所以我正在寻找一种方法来查询和尽快显示所有数据.我用asyncTask完成了这个是代码:
private class PrepareAdapter extends AsyncTask<Void,Void,CustomCursorAdapter > {
@Override
protected void onPreExecute() {
dialog.setMessage("Wait");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.show();
Log.e("TAG","Posle nov mAdapter");
}
@Override
protected CustomCursorAdapter doInBackground(Void... unused) {
Cursor cursor = myDbNamesHelper.getCursorQueryWithAllTheData();
mAdapter.changeCursor(cursor);
startManagingCursor(cursor);
Log.e("TIME","posle start managing Cursor" + String.valueOf(SystemClock.elapsedRealtime()-testTime)+ " ms");
testTime=SystemClock.elapsedRealtime();
mAdapter.initIndexer(cursor);
return mAdapter;
}
protected void onPostExecute(CustomCursorAdapter result) {
TabFirstView.this.getListView().setAdapter(result);
Log.e("TIME","posle adapterSet" + String.valueOf(SystemClock.elapsedRealtime()-testTime)+ " ms");
testTime=SystemClock.elapsedRealtime();
dialog.dismiss();
}
Run Code Online (Sandbox Code Playgroud)
}
除了我需要将结果设置为适配器的部分之外,这个工作正常.我做了一些时间测试,需要大约700毫秒来使它超过startManagingCursor.问题是它需要大约7秒才能超过setAdapter(结果)并且它在UI线程中运行,因此它使我的应用程序无响应(进度对话框冻结,有时会执行应用程序).我如何减少这个时间?我可以使这也在后台运行或以任何方式提高响应能力?
TNX.
public class CustomCursorAdapter extends SimpleCursorAdapter implements OnClickListener,SectionIndexer,Filterable,
android.widget.AdapterView.OnItemClickListener{
private Context context;
private int layout;
private AlphabetIndexer …Run Code Online (Sandbox Code Playgroud) 我已经像下面提到的链接一样做了图像的联系人列表,
http://deshmukhanil.blogspot.in/2012/02/wanted-to-create-fast-scrolling-with.html
但问题是,当我点击字母表列表时,租船人没有显示,只有当我滚动浏览"setFastScrollEnabled"但我不想在我的屏幕上显示"FastScroll"时才会显示:这里是显示内容的链接我想要,
http://deshmukhanil.blogspot.in/2012/02/wanted-to-create-fast-scrolling-with_09.html
我正在尝试用AlphabetIndexer实现一个快速滚动条,但是当光标改变时,它没有刷新索引chache.在我的CursorAdapter构造函数中,我调用setCursor(cursor)但没有任何更改,并根据文档:
如果光标发生变化,您的适配器负责通过调用setCursor(Cursor)来更新光标.getPositionForSection(int)方法执行二进制搜索给定部分(字母表)的起始索引.
但什么都没发生.我将其用于搜索过滤器,因此当我搜索联系人时,它会使用联系人更新列表,因此AlphabetIndexer应该用于更新列表中新项目的索引.
示例:我的整个列表以以"A"开头的联系人开头,以以"E"开头的联系人结束.所以AlphabetIndexer会在其缓存中包含这些索引.
但是,让我们尝试使用'C'搜索联系人,并假设我有250个以'C'开头的联系人.所以,我必须快速滚动浏览这些联系人,并且'C'索引必须显示,但不是只有'C'它显示所有索引,当我有整个列表时显示.
这是我的CursorAdapter构造函数,我为每个输入的字母调用setCursor(cursor):
public MyCursorAdapter(Context context, Cursor cursor, ArrayList<Integer> ids)
{
super(context, cursor);
try
{
mAlphaIndexer = new AlphabetIndexer(cursor, cursor.getColumnIndexOrThrow("Name")," ABCDEFGHIJKLMNOPQRSTUVWXYZ");
notifyDataSetChanged();
mAlphaIndexer.setCursor(cursor);
this.mSelectedContacts = ids;
Log.e("MyCursorAdapter", "construtor: ");
}
catch(Exception ex)
{
Log.e("MyCursorAdapter", "Error: " + ex);
}
finally
{
mAlphaIndexer.setCursor(cursor);
}
}
Run Code Online (Sandbox Code Playgroud)