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
}
Preciso exibir duas visualizações de lista lado a lado, menu à esquerda e seu conteúdo à direita. Por padrão, o primeiro menu é selecionado e seu conteúdo é exibido no lado direito. O fragmento que exibe o conteúdo é o seguinte:
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 e onCreateView são chamados duas vezes . Existem muitos exemplos por aí usando fragmentos. Como sou iniciante neste assunto, não consigo relacionar o exemplo com o meu problema. Preciso de uma maneira infalível de lidar com a mudança de orientação. Eu NÃO declarei android:configChanges
no arquivo de manifesto. Preciso que a atividade seja destruída e recriada para que possa usar um layout diferente no modo paisagem.
android
android-fragments
android-orientation
user1811741
fonte
fonte
Respostas:
Você está criando um novo fragmento cada vez que vira a tela em sua atividade.
onCreate();
Mas também está mantendo os antigos comsuper.onCreate(savedInstanceState);
. Então, talvez defina a tag e encontre o fragmento, se ele existir, ou passe o pacote nulo para super.Isso me levou um tempo para aprender e pode ser realmente uma merda quando você está trabalhando com coisas como o viewpager.
Eu recomendo que você leia sobre fragmentos mais uma vez, já que este tópico exato é abordado.
Aqui está um exemplo de como lidar com fragmentos em uma mudança de orientação regular:
Atividade :
Fragmento :
fonte
Uma boa orientação sobre como reter os dados entre as mudanças de orientação e a recreação da atividade pode ser encontrada nas diretrizes do Android .
Resumo:
faça com que seu fragmento seja retido:
Crie um novo fragmento apenas se necessário (ou, pelo menos, obtenha dados dele)
fonte