Ändern Sie das Layout, während sich die Ausrichtung zur Laufzeit in einem Fragment ändert, ohne die Ansicht neu zu erstellen

Ich versuche, eine erste App zu entwickeln, die Bilder aus dem Internet herunterlädt und in einer Rasteransicht anzeigt. Die Rasteransicht ist ein Fragment einer Hauptaktivität. Der Download-Vorgang wird mit einer AsyncTask in der onCreate-Funktion durchgeführt. Um die Bilder beim Ausrichtungswechsel nicht erneut herunterzuladen, stelle ich dieandroid:configChanges="orientation|screenSize" im Android-Manifest. Dann wird die onCreate-Funktion nur einmal aufgerufen und alles ist in Ordnung ... mit der Ausnahme, dass ich im Querformat einige Änderungen am Layout für das Rasteransichtsfragment vornehmen muss. Also habe ich 2 Layoutblätter erstellt:fragment_library.xml undfragment_library_land.xml im layout / ordner. Damit diese Änderungen funktionieren, habe ich versucht, das Layout des Bibliotheksfragments mithilfe der Funktion onConfigurationChanged manuell zu ändern. Zur Laufzeit wertet das Programm die Funktion aus und übergibt im guten Fall (Hoch- oder Querformat), aber das verwendete Layout ist weiterhin das für den Hochformatmodus:fragment_library.xml ...

public class LibraryFragment extends Fragment {
    public GridView gridview;
    private Boolean isImageAdapterPopulated = false;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        GetLibraryTask getLibraryTask = new GetLibraryTask(this);
        getLibraryTask.execute(Config.URL + "action=getLibrary");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        if (container == null)
            return null;

        // gridview
        View V = inflater.inflate(R.layout.fragment_library, container, false);
        gridview = (GridView)V.findViewById(R.id.gridview);

        if(this.isImageAdapterPopulated)
            this.setGridAdapter();
        return V;
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig){
        super.onConfigurationChanged(newConfig);
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService( Context.LAYOUT_INFLATER_SERVICE );
            inflater.inflate(R.layout.fragment_library_land, null);
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
            LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService( Context.LAYOUT_INFLATER_SERVICE );
            inflater.inflate(R.layout.fragment_library, null);
        }
    }

    public void setGridAdapter(){
        this.isImageAdapterPopulated = true;
        gridview.setAdapter(new ImageAdapter(getActivity()));
    }

    // ...
}

fragment_library.xml

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview"
    android:cacheColorHint="@android:color/transparent"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:columnWidth="200dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="20dp"
    android:stretchMode="columnWidth"
    android:gravity="bottom"
/>

fragment_library_land.xml

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview"
    android:cacheColorHint="@android:color/transparent"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:columnWidth="400dp"
    android:numColumns="2"
    android:verticalSpacing="50dp"
    android:horizontalSpacing="50dp"
    android:stretchMode="columnWidth"
    android:gravity="bottom"
/>

Danke für die Hilfe :)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage