Jam*_*and 2 android android-listview android-cursoradapter
我有一个自定义的CursorAdapter类,它使用字母索引器,我想实现可过滤,但我有一些问题让它正常运行.
c = db.selectData();
lv = (ListView) findViewById(android.R.id.list);
searchTerm = (EditText) findViewById(R.id.inputSearch);
lv.setFastScrollEnabled(true);
adapter = new MyCursorAdapter(getApplicationContext(), R.layout.rowlayout, c, new String[]{"_id, name, company, job_title"},
new int[]{R.id.company, R.id.job_title, R.id.name});
adapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
// Search for states whose names begin with the specified letters.
Cursor cursor = db.searchAttendees(constraint.toString());
return cursor;
}
});
lv.setAdapter(adapter);
getListView().setTextFilterEnabled(true);
searchTerm.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
System.out.println("Text ["+s+"]");
adapter.getFilter().filter(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
Run Code Online (Sandbox Code Playgroud)
这是MyCustomAdapter类
public class MyCursorAdapter extends CursorAdapter implements SectionIndexer, Filterable
{
AlphabetIndexer mAlphabetIndexer;
public MyCursorAdapter(Context context, int simpleListItem1,
Cursor cursor, String[] strings, int[] is)
{
super(context, cursor);
mAlphabetIndexer = new AlphabetIndexer(cursor,
cursor.getColumnIndex("name"),
" ABCDEFGHIJKLMNOPQRTSUVWXYZ");
mAlphabetIndexer.setCursor(cursor);//Sets a new cursor as the data set and resets the cache of indices.
}
/**
* Performs a binary search or cache lookup to find the first row that matches a given section's starting letter.
*/
@Override
public int getPositionForSection(int sectionIndex)
{
return mAlphabetIndexer.getPositionForSection(sectionIndex);
}
/**
* Returns the section index for a given position in the list by querying the item and comparing it with all items
* in the section array.
*/
@Override
public int getSectionForPosition(int position)
{
return mAlphabetIndexer.getSectionForPosition(position);
}
/**
* Returns the section array constructed from the alphabet provided in the constructor.
*/
@Override
public Object[] getSections()
{
return mAlphabetIndexer.getSections();
}
@Override
public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
//What to do here?
}
/**
* Bind an existing view to the data pointed to by cursor
*/
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView name = (TextView)view.findViewById(R.id.name);
name.setText(cursor.getString(
cursor.getColumnIndex("name")));
TextView company = (TextView)view.findViewById(R.id.company);
company.setText(cursor.getString(
cursor.getColumnIndex("company")));
TextView jobTitle = (TextView)view.findViewById(R.id.job_title);
jobTitle.setText(cursor.getString(
cursor.getColumnIndex("job_title")));
}
/**
* Makes a new view to hold the data pointed to by cursor.
*/
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
View newView = inflater.inflate(
R.layout.attendee_item_row, parent, false);
return newView;
}
Run Code Online (Sandbox Code Playgroud)
我知道我需要使用runQueryOnBackgroundThread,但我不知道我打算在这个方法中实现什么.有人可以帮我吗?或者指出一些例子的方向?
谢谢!
我知道我需要使用runQueryOnBackgroundThread,但我不知道我打算在这个方法中实现什么.
如果设置了FilterQueryProvider上CursorAdapter,那么你不会覆盖方法(默认情况下调用runQuery的方法FilterQueryProvider).当您想要过滤适配器时,只需调用getFilter().filter(constraint)方法为其提供新约束.
| 归档时间: |
|
| 查看次数: |
2937 次 |
| 最近记录: |