Cambie el diseño mientras que la orientación cambia en tiempo de ejecución en un fragmento sin volver a crear la vista
Intento desarrollar una primera aplicación que descargue imágenes de la red y las muestre en una vista de cuadrícula. La vista de cuadrícula es un fragmento de una actividad principal. El proceso de descarga se realiza con una AsyncTask en la función onCreate. Para no volver a descargar las imágenes mientras se cambia la orientación, configuroandroid:configChanges="orientation|screenSize"
En el manifiesto de Android. Entonces, la función onCreate es solo llamada una vez y todo está bien ... excepto que tengo que hacer algunos cambios en el diseño para el fragmento de vista de cuadrícula en modo horizontal. Así que creé 2 hojas de diseño:fragment_library.xml
yfragment_library_land.xml
en el diseño / carpeta. Para hacer que estos cambios funcionen, intenté cambiar el diseño del fragmento de la biblioteca manualmente utilizando la función onConfigurationChanged. En el tiempo de ejecución, el programa evalúa la función y la pasa en el caso correcto (vertical u horizontal), pero el diseño utilizado sigue siendo el del modo vertical: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"
/>
Gracias por la ayuda :)