Layout ändern, während Sie die Ausrichtung ändern, die zur Laufzeit in einem fragment ohne die Neuerstellung der Ansicht

Ich versuche zu entwickeln, um eine erste app, die das herunterladen von Bildern aus dem Netz und zeigen Sie in einem gridview. Das gridview ist ein fragment einer Haupttätigkeit. Der download-Prozess wird mit einem AsyncTask in der onCreate-Funktion. Um nicht erneut herunterladen der Bilder, während die Orientierung ändern, habe ich die android:configChanges="orientation|screenSize" im Android-Manifest. Dann in der onCreate-Funktion ist der Aufruf nur einmal und alles ist gut ... außer, dass ich habe ein paar änderungen im layout für das gridview-fragment im Querformat. So habe ich 2 layout-Blatt : fragment_library.xml und fragment_library_land.xml im layout/Ordner. Zu diesen änderungen arbeiten, ich habe versucht, das layout zu verändern von der Bibliothek fragment manuell mithilfe der onConfigurationChanged Funktion. Zur Laufzeit des Programms bewerten Sie die Funktion auf und übergeben im guten Fall (hochformat oder Querformat), aber das layout ist immer noch das man für den portrait-Modus : 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 🙂

InformationsquelleAutor popov130 | 2013-01-15
Schreibe einen Kommentar