为什么Fragment的布局不会动态变化?

时间:2014-03-10 15:51:50

标签: android android-layout android-fragments

我正在制作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()中,根据方向以编程方式添加ListViewGridView。但是,在配置更改时,没有任何反应。以下是我处理配置更改的方法:

    @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);
        }
    }  

我尝试删除有关配置更改的所有视图,但没有任何反应。 这里需要更改什么?

1 个答案:

答案 0 :(得分:2)

您是否已将您的活动“注册”到configChanges?

您需要添加:

 <activity android:name="com.bla.bla.YourActivity"
            android:configChanges="keyboardHidden|orientation|screenSize" >

在您的Manifest中,以便调用onConfigurationChanged ...

编辑:

但是,更好的方法是在不同的布局文件夹(layout-land或layout-port)中使用两种不同的布局。一个是gridview,另一个是listview。这样您就不需要“手动”处理配置更改。只需处理onCreate中的差异...... (您的活动将在配置更改时销毁并再次创建...)