我正在制作Fragment
,其布局应该动态更改。这是它的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/root">
</LinearLayout>
在onCreateView()
中,根据方向以编程方式添加ListView
或GridView
。但是,在配置更改时,没有任何反应。以下是我处理配置更改的方法:
@Override
public void onConfigurationChanged(Configuration newConfig){
if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
root = (LinearLayout) getActivity().findViewById(R.id.root);
root.removeAllViewsInLayout();
listView = new ListView(getActivity());
listView.setAdapter(adapter);
root.addView(listView,params);
}else if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
root = (LinearLayout) getActivity().findViewById(R.id.root);
root.removeAllViewsInLayout();
gridView = new GridView(getActivity());
gridView.setNumColumns(2);
gridView.setColumnWidth(150);
gridView.setAdapter(adapter);
root.addView(gridView,params);
}
}
我尝试删除有关配置更改的所有视图,但没有任何反应。 这里需要更改什么?
答案 0 :(得分:2)
您是否已将您的活动“注册”到configChanges?
您需要添加:
<activity android:name="com.bla.bla.YourActivity"
android:configChanges="keyboardHidden|orientation|screenSize" >
在您的Manifest中,以便调用onConfigurationChanged ...
编辑:
但是,更好的方法是在不同的布局文件夹(layout-land或layout-port)中使用两种不同的布局。一个是gridview,另一个是listview。这样您就不需要“手动”处理配置更改。只需处理onCreate中的差异...... (您的活动将在配置更改时销毁并再次创建...)