我想过滤一个SimpleCursorAdapter驱动的ListView,它上面有一个EditText框.我有以下代码,但当我输入框时,没有任何反应; 完整列表继续显示.我究竟做错了什么?
mCursor = getDirectoryList(null);
adapter = new SimpleCursorAdapter(this,
R.layout.directory_people_item, mCursor,
new String[]{
directoryPeople.LAST_NAME,
directoryPeople.FIRST_NAME,
directoryPeople.MIDDLE_NAME,
directoryPeople.JOB_TITLE},
new int[]{
R.id.txtLastName,
R.id.txtFirstName,
R.id.txtMiddle,
R.id.txtTitle}
);
ListView av = (ListView)findViewById(R.id.listPeople);
av.setAdapter(adapter);
av.setFastScrollEnabled(true);
av.setTextFilterEnabled(true);
EditText etext=(EditText)findViewById(R.id.search_box);
etext.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void afterTextChanged(Editable s) {
ListView av = (ListView)findViewById(R.id.listPeople);
SimpleCursorAdapter filterAdapter = (SimpleCursorAdapter)av.getAdapter();
filterAdapter.getFilter().filter(s.toString());
}
});
adapter.setFilterQueryProvider(new FilterQueryProvider() {
public …Run Code Online (Sandbox Code Playgroud) 我有一个ListView,其中包含一个由SimpleCursorAdapter支持的自定义项布局.我希望用户能够在EditText框中键入文本,并让ListView在键入时自动过滤.看起来这是与ArrayAdapter很简单的事,如所描述这里.
不幸的是,我没有运气使用SimpleCursorAdapter.我已尝试添加此处所述的额外方法,但该示例适用于AutoCompleteTextView而不是ListView.我无法为ListView工作.
有人可以为我提供一个使用EditText框过滤SimpleCursorAdapter支持的ListView的示例吗?
public class DirectoryListActivity extends DirectoryActivity {
private static SimpleCursorAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.directory_list);
fillPeopleListView();
EditText etext=(EditText)findViewById(R.id.search_box);
etext.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void afterTextChanged(Editable s) {
adapter.getFilter().filter(s.toString());
}
});
}
private void fillPeopleListView() {
// Populate the ListView
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(
directoryPeople.PEOPLE_TABLE
); …Run Code Online (Sandbox Code Playgroud) 我datetime在User/ userstable中有两列:created_at和birthdate.我想找到生日日期不到13年的用户.
等效的Rails if语句将是((created_at - birthdate) < 13.years)
如何将其转换为ActiveRecord查询(一个可以在PostgreSQL上运行的查询)?这甚至是可能的,还是我必须手动迭代所有记录?
postgresql activerecord ruby-on-rails ruby-on-rails-3 rails-activerecord
我试图在一个XML解析非UI线程的ListView中显示的SimpleCursorAdapter上调用.notifyDataSetChange(),并且不能在我的生活中弄清楚如何.我已经搜遍了所有我发现的文章都是关于从ListView本身内部进行刷新的文章,我不会这样做.我无法想出一种方法来传递适配器或从父节点获取它或我需要做什么来从另一个线程调用它的方法.
ListView将在下次启动活动时更新,但是我希望它在XML解析完成后立即刷新,以便用户立即看到新数据.
答案可能很简单; 它只是在逃避我.在此先感谢您的帮助!
这是我的代码:
public class DirectoryListActivity extends DirectoryActivity {
public final Handler mHandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.directory_list);
// Populate the ListView
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(
directoryPeople.PEOPLE_TABLE
);
String asColumnsToReturn[] = {
//snip
};
mCursor = queryBuilder.query(mDB, asColumnsToReturn, null, null,
null, null, directoryPeople.DEFAULT_SORT_ORDER);
startManagingCursor(mCursor);
// HERE'S THE ADAPTER
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.directory_people_item, mCursor,
new String[]{
//snip
new int[]{
//snip
);
ListView av = (ListView)findViewById(R.id.listPeople);
av.setAdapter(adapter);
//Perform sync in …Run Code Online (Sandbox Code Playgroud)