布局是基本的:顶部的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
    }
}
有帮助吗?

解决方案

我以为我会做出这个自我缩短的帖子,以防其他适合Android开发的程序员(像我一样)被这对此感到困惑。所以,根据 Android参考 仅当活动是

1)创建

2)重新启动

3)恢复(简历后带到前景)

好的,那么屏幕方向与此有什么关系?好吧,大多数阅读文档的开发人员浏览了它,因为有很多要阅读的事实,他们只是想实现很酷的东西。我没什么不同。如果我还读了进一步的阅读,我会避免稍后遇到很多头痛:

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

现在很明显,为什么过滤器无法正常工作。问题在于(一旦活动在屏幕方向上破坏了)litchadapter并未完全或根本没有填充(由于刷新的异步性),然后才能开始过滤。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top