0

布局是基本的:顶部有一个 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
    }
}
4

1 回答 1

1

我想我会做这个自我回复的帖子,以防其他刚接触 Android 开发的程序员(比如我)被这个难住了。所以,根据android 参考onResume 只会在 Activity 被调用

1) 创建

2) 重新启动

3) resumed(恢复后带到前台)

好的,那么屏幕方向与此有什么关系?好吧,大多数阅读文档的开发人员都会略读它,因为有很多东西要阅读,他们只是想实现一些很酷的东西。我也不例外。如果我进一步阅读,我以后会避免很多头痛:

除非您另外指定,否则配置更改(例如屏幕方向、语言、输入设备等的更改)将导致您当前的活动被破坏

现在很明显为什么过滤器不能正常工作。问题是(一旦活动在屏幕方向更改时被破坏)listAdapter 在开始过滤之前没有完全或根本没有填充(由于刷新的异步性质)。

于 2010-06-11T15:52:50.867 回答