方向改变后的空列表

时间:2015-08-14 13:47:34

标签: android android-fragments android-configchanges

首先,我已经看过this question了。在我的场景中,我有一个扩展support.v4.app.ListFragment的片段。该片段调用自定义适配器。我需要在将切换到2窗格布局的设备上处理方向更改。我相信我正在做大多数事情,因为视图本身正确更改并且我能够从savedInstanceState中检索数据。但是,我的列表总是空的。我尝试了链接问题中的推荐答案(调用setListShown(true)),但是我得到了一个例外,"不能用于自定义内容视图"。相关代码如下:

@Override
public void onConfigurationChanged(Configuration newConfig){
    super.onConfigurationChanged(newConfig);

    LayoutInflater inflater = LayoutInflater.from(getActivity());
    ViewGroup group = ((ViewGroup) getView());
    group.removeAllViews();
    inflater.inflate(R.layout.activity_message_list, group);  
    if(!messages.isEmpty()){
        mAdapter = new MessageListAdapter(getActivity().getApplicationContext(), messages);
    }
    setListAdapter(mAdapter); 
}

配置更改后,永远不会调用适配器的getView方法。还需要做些什么来重新补充视图?如果您需要查看任何其他代码,请与我们联系。

2 个答案:

答案 0 :(得分:1)

由于您正在创建新视图,因此您必须重做所有在原始代码片段中执行的View初始化(在onViewCreated或其他位置)。因此,为了初始化ListView,您应该执行以下操作:

View rootView = inflater.inflate(R.layout.activity_message_list, group);  
if(!messages.isEmpty()){
    mAdapter = new MessageListAdapter(getActivity().getApplicationContext(), messages);
}
ListView listView = (ListView) root.findViewById(R.id.<your_list_view_id>;
listView.setAdapter(mAdapter);

请记住,您还必须进行所有其他初始化(创建对视图的引用并创建onClickListeners或您正在做的任何其他事情)

答案 1 :(得分:0)

有一种方法可以避免在设备方向改变后重新加载应用程序,您只需告诉系统您将自己处理屏幕方向更改事件。 您是否尝试在Manifest.xml中的活动标记内添加参数 android:configChanges =“orientation”