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
}
Ich muss zwei Listenansichten nebeneinander anzeigen, das Menü links und den Inhalt rechts. Standardmäßig ist das erste Menü ausgewählt und sein Inhalt wird auf der rechten Seite angezeigt. Das Fragment, das den Inhalt anzeigt, lautet wie folgt:
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 und onCreateView werden zweimal aufgerufen . Es gibt viele Beispiele, die Fragmente verwenden. Da ich Anfänger in diesem Fach bin, kann ich das Beispiel nicht mit meinem Problem in Verbindung bringen. Ich brauche einen narrensicheren Weg, um mit Orientierungsänderungen umzugehen. Ich habe NICHT android:configChanges
in Manifest-Datei deklariert . Ich muss die Aktivität zerstören und neu erstellen, damit ich im Querformat ein anderes Layout verwenden kann.
android
android-fragments
android-orientation
user1811741
quelle
quelle
Antworten:
Sie erstellen jedes Mal ein neues Fragment, wenn Sie den Bildschirm in Ihrer Aktivität drehen.
onCreate();
Sie behalten jedoch auch die alten beisuper.onCreate(savedInstanceState);
. Setzen Sie also möglicherweise ein Tag und suchen Sie das Fragment, falls vorhanden, oder übergeben Sie das Null-Bundle an super.Ich habe eine Weile gebraucht, um zu lernen, und es kann wirklich ein Bi **** sein, wenn Sie mit Sachen wie Viewpager arbeiten.
Ich würde Ihnen empfehlen, ein zusätzliches Mal über Fragmente zu lesen, da genau dieses Thema behandelt wird.
Hier ist ein Beispiel für den Umgang mit Fragmenten bei einer regelmäßigen Orientierungsänderung:
Aktivität :
Fragment :
quelle
Eine gute Richtlinie zum Speichern von Daten zwischen Orientierungsänderungen und der Wiederherstellung von Aktivitäten finden Sie in den Android-Richtlinien .
Zusammenfassung:
Machen Sie Ihr Fragment haltbar:
Erstellen Sie nur bei Bedarf ein neues Fragment (oder nehmen Sie zumindest Daten daraus)
quelle