gpt4 book ai didi

android - CursorAdapter 实现 Filterable

转载 作者:太空狗 更新时间:2023-10-29 16:21:09 24 4
gpt4 key购买 nike

我有一个使用字母表索引器的自定义 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) {
}
});

}

这是 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;
}

我知道我需要使用 runQueryOnBackgroundThread 但我不知道我打算在这个方法中实现什么。有人可以帮我吗?或者指出一些例子的方向?

谢谢!

最佳答案

I know I need to use runQueryOnBackgroundThread but I don't know what I am meant to implement in this method.

如果您在 CursorAdapter 上设置了一个 FilterQueryProvider,那么您不会覆盖该方法(默认情况下调用 runQuery 的方法FilterQueryProvider)。当您想要过滤适配器时,只需调用 getFilter().filter(constraint) 方法为其提供新的约束。

关于android - CursorAdapter 实现 Filterable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14524554/

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