我有Listview
显示数据库中的所有数据。我目前有一个过滤器onTextChanged
方法,用于过滤用户输入的字符串。这完全有效,直到我覆盖活动类的onResume()
方法。当用户点击后退按钮时,我已使用此onResume()
重新加载Listview
。
如上所述,没有onResume
它完美地运作。使用onResume()过滤器被阻止。
这是我的代码:
public class view extends ListActivity {
ImageButton searchButton;
EditText searchName;
ListView searchedListResults;
long idToPass;
String numReturned;
String email;
@Override
protected void onResume() {
super.onResume();
list();
}
SimpleCursorAdapter cursorAdapter;
DBHandler getCons;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
searchedListResults = (ListView) findViewById(android.R.id.list);
list();
searchName = (EditText) findViewById(R.id.inputName);
searchedListResults.setTextFilterEnabled(true);
searchName.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
cursorAdapter.getFilter().filter(s.toString());
// list();
searchedListResults.refreshDrawableState();
}
});
getCons = new DBHandler(this, null, null);
cursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
getCons.open();
return getCons.getChanges(constraint.toString());
}
});
searchedListResults.setAdapter(cursorAdapter);
}
private void list() {
DBHandler DBsearchRef = new DBHandler(this, null, null);
DBHandler search = new DBHandler(this, null, null);
search.open();
Cursor cursor = search.getData();
search.close();
startManagingCursor(cursor);
String[] from = new String[] { DBsearchRef.KEY_NAME,
DBsearchRef.KEY_TEL, DBsearchRef.KEY_EMAIL,
DBsearchRef.KEY_COMMENTS };
int[] to = new int[] { R.id.txtNameSet, R.id.txtContactSet,
R.id.txtEmailSet, R.id.txtCommentSet };
cursorAdapter = new SimpleCursorAdapter(this, R.layout.searchagain,
cursor, from, to);
searchedListResults.setAdapter(cursorAdapter);
}
}
答案 0 :(得分:2)
如上所述没有onResume它完美地运作。使用onResume()过滤器被阻止。
在list()
和onCreate()
中调用onResume()
之间的区别在于您只在onCreate()
中设置了FilterQueryProvider。因此,当在onResume()
中创建一个新的CursorAdapter时,不会有一个过滤器......
<强>提示强>
如果你搬家:
cursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
getCons.open();
return getCons.getChanges(constraint.toString());
}
});
进入list()
,然后您的代码将按预期运行。
如果我删除了onresume方法,那么当单击后退时我最终会得到一个空白列表视图。
如果您在返回活动时有数据“消失”,则必须自己将其保存在onSaveInstanceState()
和onRestoreInstanceState()
中。它们使用起来非常简单,这是Recreating an Activity上的开发人员指南。
最后,您无需在 list()
和onResume()
中调用onCreate()
,它在两个地方都会做同样的事情。目前,它不会添加onCreate()
后更改的任何功能,因此您可以完全删除onResume()
方法。