【问题标题】:Why doesn't ArrayAdapter filter correctly after screen orientation change?为什么屏幕方向更改后 ArrayAdapter 不能正确过滤?
【发布时间】:2010-06-11 15:52:23
【问题描述】:

布局是基本的:顶部有一个 EditText,后跟一个 ListView。 EditText 实现了 TextWatcher.onTextChanged,以便使用输入的文本调用 ArrayAdapter.getFilter.filter。 ArrayAdapter 的数据在恢复时异步刷新(参见下面的代码 sn-p)。很简单,工作也很好......直到屏幕方向改变。手机横着看,为什么过滤会突然坏掉?

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 filter orientation screen-orientation


    【解决方案1】:

    我想我会写这篇自我回复的帖子,以防其他刚接触 Android 开发的程序员(比如我)被这个问题难住了。因此,根据android reference onResume 只会在 Activity 为时被调用

    1) 已创建

    2) 重新启动

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

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

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

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

    【讨论】:

    • 没错,仅针对将到达此处的其他人:您可以通过将orientation 添加到android:configChanges 元素的android:configChanges 属性来关闭此默认行为。 但是您必须手动处理方向更改。更多信息在这里:developer.android.com/guide/topics/manifest/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多