布局是基本的:顶部是EditText,后面是ListView。 EditText实现了TextWatcher.onTextChanged,以便使用输入的文本调用ArrayAdapter.getFilter.filter。 ArrayAdapter的数据在恢复时异步刷新(参见下面的代码片段)。很容易,也可以正常工作......直到屏幕方向改变。为什么当手机转向侧面时过滤会突然中断?
public class SometActivity extends ListActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
...
listAdapter = new ArrayAdapter<MemoryStatistic>(this, R.layout.list_item);
setListAdapter(listAdapter);
searchText = (EditText)findViewById(R.id.searchText);
searchText.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence text, int start, int before, int count)
{
listAdapter.getFilter().filter(text);
}
...
}
...
}
@Override
protected void onResume()
{
asyncRefreshListAdapter();//refresh the data asynchronously when activity is resumed
}
}
答案 0 :(得分:1)
我以为自己会发布这个自我回复帖子,以防其他熟悉Android开发的程序员(比如我)感到难过。因此,根据android reference onResume仅在Activity为
时才会被调用1)创建了
2)重启
3)恢复(恢复后进入前景)
好的,屏幕方向与此有什么关系? 好吧,大多数阅读文档的开发人员都会因为有很多内容需要阅读并且他们只是想实现一些很酷的东西。我没有什么不同。如果我只是进一步阅读,我以后会避免很多头痛:
除非您另行指定,否则配置更改(例如屏幕方向,语言,输入设备等的更改)将导致您的当前活动被销毁
现在很明显为什么过滤器无法正常工作。问题是(一旦活动在屏幕方向改变时被破坏)listAdapter在开始过滤之前没有完全或完全填充(由于刷新的异步性质)。