public class MainActivity extends Activity implements MainMenuFragment.OnMainMenuItemSelectedListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
// add menu fragment
MainMenuFragment myFragment = new MainMenuFragment();
fragmentTransaction.add(R.id.menu_fragment, myFragment);
//add content
DetailPart1 content1= new DetailPart1 ();
fragmentTransaction.add(R.id.content_fragment, content1);
fragmentTransaction.commit();
}
public void onMainMenuSelected(String tag) {
//next menu is selected replace existing fragment
}
J'ai besoin d'afficher deux vues de liste côte à côte, le menu à gauche et son contenu à droite. Par défaut, le premier menu est sélectionné et son contenu est affiché sur le côté droit. Le fragment qui affiche le contenu est comme ci-dessous:
public class DetailPart1 extends Fragment {
ArrayList<HashMap<String, String>> myList = new ArrayList<HashMap<String, String>>();
ListAdapter adap;
ListView listview;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(savedInstanceState!=null){
myList = (ArrayList)savedInstanceState.getSerializable("MYLIST_obj");
adap = new LoadImageFromArrayListAdapter(getActivity(),myList );
listview.setAdapter(adap);
}else{
//get list and load in list view
getlistTask = new GetALLListTasks().execute();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.skyview_fragment, container,false);
return v;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("MYLIST_obj", myList );
}
}
OnActivityCreated et onCreateView sont appelés deux fois . Il existe de nombreux exemples utilisant des fragments. Comme je suis débutant dans ce sujet, je suis incapable de relier l'exemple à mon problème. J'ai besoin d'un moyen infaillible pour gérer le changement d'orientation. Je n'ai PAS déclaré android:configChanges
dans le fichier manifeste. J'ai besoin de l'activité détruire et recréer pour pouvoir utiliser une mise en page différente en mode paysage.
android
android-fragments
android-orientation
user1811741
la source
la source
Réponses:
Vous créez un nouveau fragment à chaque fois que vous tournez l'écran dans votre activité
onCreate();
Mais vous maintenez également les anciens avecsuper.onCreate(savedInstanceState);
. Alors peut-être définir la balise et trouver le fragment s'il existe, ou passer le bundle nul à super.Cela m'a pris du temps à apprendre et cela peut vraiment être un bi **** lorsque vous travaillez avec des trucs comme viewpager.
Je vous recommande de lire un peu plus sur les fragments, car ce sujet exact est couvert.
Voici un exemple de gestion des fragments lors d'un changement d'orientation régulier:
Activité :
Fragment :
la source
Un bon guide sur la façon de conserver les données entre les changements d'orientation et les activités récréatives se trouve dans les directives Android .
Résumé:
rendre votre fragment conservable:
Créer un nouveau fragment uniquement si nécessaire (ou au moins en extraire des données)
la source