首先,我已经看过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方法。还需要做些什么来重新补充视图?如果您需要查看任何其他代码,请与我们联系。
答案 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”?