0

Я не знаю, почему, но после воссоздания активности и фрагмента в изменении ориентации система останавливает фрагмент. Im, используя вкладку фрагментов на панели действий с помощью TabListener.onStop() называется таинственным образом после изменения ориентации отдыха

Вход:

09-09 16:49:36.132: I/fraglifecycle(1432): ChatFragment.onCreateView(); 
09-09 16:49:36.284: I/fraglifecycle(1432): ChatFragment.onServiceConnected(); 
09-09 16:49:36.288: I/fraglifecycle(1432): recuperando posição da listview: 2 
================================= ROTATION ================================== 
09-09 16:49:56.928: I/fraglifecycle(1432): onSaveInstanceState() 
09-09 16:49:56.932: I/fraglifecycle(1432): ChatFragment.onStop(); 
09-09 16:49:57.028: I/fraglifecycle(1432): ChatFragment.onCreateView(); 
09-09 16:49:57.280: I/fraglifecycle(1432): tab selected; mFragment != null, attaching 
09-09 16:49:57.284: I/fraglifecycle(1432): ChatFragment.onServiceConnected(); 
09-09 16:49:57.284: I/fraglifecycle(1432): recuperando posição da listview: 5 
09-09 16:49:57.436: I/fraglifecycle(1432): ChatFragment.onStop(); 

печати до изменения: https://www.dropbox.com/s/upk42kjbvgizoe1/Captura%20de%20tela%202014-09-09%2013.54.07.png?dl=0

Печать после изменения: https://www.dropbox.com/s/mse9z29zk6ou2nr/Captura%20de%20tela%202014-09-09%2013.52.55.png?dl=0

Мой фрагмент:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    activity = (MainActivity) getActivity(); 

    // Em algumas versões do Android, este metódo ocasionará o chamado do 
    // metodo onOptionsMenuCreate() imediatamente 
    setHasOptionsMenu(true); 

    View view = inflater.inflate(R.layout.chat_layout, container, false); 

    edittext = (MyEditText) view.findViewById(R.id.chatinput); 
    edittext.setOnEditorActionListener(this); 

    listview = (ListView) view.findViewById(R.id.chatlist); 

    bt_send = (ImageView) view.findViewById(R.id.sendbutton); 
    bt_send.setOnClickListener(this); 

    registerForContextMenu(listview); 

    // Request service connection 

    Intent it = new Intent(activity, MyService.class); 

    activity.bindService(it, this, 0); 

    return view; 
} 

@Override 
public void onStop() { 

    activity.unbindService(this); 

    super.onStop(); 
} 

@Override 
public void onServiceConnected(ComponentName name, IBinder binderservice) { 
      LocalBinder binder = (LocalBinder) binderservice; 
    this.service = binder.getService(); 

    if (this.isChannel()) { 
     conversa = service.getCanalAdapter(); 
    } else { 
     String stringuuid = getArguments().getString(EXTRA_ARGUMENT); 
     conversa = service.getPVTAdapter(UUID.fromString(stringuuid)); 
    } 

    listview.setAdapter(conversa); 

} 

Пожалуйста, помогите мне, им иметь несколько проблем с циклом Fragment-Service-Orientation изменения и застрял в развитии у меня больше, чем через месяц. Спасибо заранее!

ответ

0

Из вашего кода и журнала, onStop(), скорее всего, вызвал предыдущую активность, а не активность, которая недавно воссоздана.

+0

Что может быть причиной? Я новичок в изменении ориентации еще, PLS помочь мне. PS: Я уже много читал о жизненном цикле фрагментов и активности, подключении к службе, изменении ориентации, но я не могу понять, что происходит. – Informatheus

+0

Это нормальный жизненный цикл. Предыдущий экземпляр мероприятия прекращается и уничтожается. – CChi

+0

Фрагмент не отсоединен от предыдущего действия, как только он будет уничтожен? Как он (предыдущая активность) останавливал фрагмент после своего собственного onDestroy()? – Informatheus

0

Поскольку это фрагмент:

Использование setRetainInstance(true); в onAttach(Activity activity) вашего фрагмента.

Это должно остановить восстановление состояния фрагмента, даже если действие изменяется, поэтому ваш фрагмент будет таким же.

Я считаю, что это должно помочь.


 
 
Open for correction, as always! 

Regards, 
Edward Quixote. 
 
+1

Но я читал это: _setRetainInstance (true): Рекомендуется использовать с фрагментами, которые не содержат никаких ссылок на что-либо, которые будут воссозданы при вращении. Это означает, что вы не должны использовать его на любом фрагменте, который содержит контекст, представления и т. Д. Типичный визуальный фрагмент.Но очень полезно использовать Fragments, которые содержат объекты, такие как запуск потоков, AsyncTasks, сбор данных, загруженные активы, полученные результаты и т. Д. Этот метод помогает использовать не визуальный фрагмент, как съемный держатель, для неконтекстно-зависимых объектов Activity ._ – Informatheus

 Смежные вопросы

  • Нет связанных вопросов^_^