Фрагмент воссоздается на заднем диске из другого фрагмента

Я сталкиваюсь с проблемой в отношении фрагмента. По моему сценарию,

Есть два фрагмента, связанных с FragmentActivity. В FragmentActivity есть макет контейнера (Frame Layout), в котором весь фрагмент будет заменен.

public void replaceFragment(Fragment fragmentClass) { String selectedFragment = fragmentClass.getClass().getName(); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager .beginTransaction(); fragmentTransaction .replace(R.id.content_frame, fragmentClass); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } 

В первый раз я установил фрагмент типа List (фрагмент A), в котором получают данные из веб-службы и papulate over listview. Я выполняю метод AsyncTask из метода onCreateView ().

В MainActivity: onCreate

 SherlockFragment fragment = new FragmentA(); replaceFragment(fragment); 

При щелчке элемента списка фрагмента A фрагмент A обратится к методу активности, чтобы заменить его на фрагмент детали фрагмента Фрагмент B.

 @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); callback = (ICallBack) activity; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { /*View rootView = inflater.inflate(R.layout.fragment_locate, container, false);*/ View rootView = inflater.inflate(R.layout.fragment_a, container, false); ListView list = (ListView) rootView .findViewById(R.id.listView); adapter = new MyListAdapter(); list.setAdapter(adapter); list .setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View convertView, int position, long id) { SherlockFragment fragment = new SalonDetailFragment(); callback.replaceFragment(fragment); } }); ListDataTask task = new ListDataTask(); task.execute(); return rootView; } class ListDataTask extends AsynTask<Void,Void,List<Data>>{ public Void doInBackground(Void parems){ List<Data> = getDataFromServer(); } onPostExecute(List<Data> data){ adapter.addAllData(data); adapter.notifyDataSetChanged(); } } 

Когда я нажму кнопку «Назад», из «Фрагмента B» приложение «Приложение» отобразит фрагмент «А», но снова запустит «Asynctask» и получит данные для заполнения списка.

Поэтому мне нужно знать, как сохранить прочное состояние Фрагмента, например Activity.

Есть ли способ не создавать Фрагмент после возвращения из другой деятельности

Посмотрите мой псевдокод.

Я получил решение. Простой …. сделать нулевое значение проверки rootview

 public class FragmentA extends Fragment { View _rootView; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (_rootView == null) { // Inflate the layout for this fragment _rootView = inflater.inflate(R.layout.fragment_a, container, false); // Find and setup subviews _listView = (ListView)_rootView.findViewById(R.id.listView); ... } else { // Do not inflate the layout again. // The returned View of onCreateView will be added into the fragment. // However it is not allowed to be added twice even if the parent is same. // So we must remove _rootView from the existing parent view group // (it will be added back). ((ViewGroup)_rootView.getParent()).removeView(_rootView); } return _rootView 

У меня такая же проблема и решена путем замены

  fragmentTransaction .replace(R.id.content_frame, fragmentClass); to fragmentTransaction .add(R.id.content_frame, fragmentClass); 

Replace всегда будет создавать новый экземпляр при повторном нажатии, в то время как Add просто добавляет новый фрагмент в Stack. Для получения дополнительной информации проверьте эту ссылку

Intereting Posts