2014-10-27 5 views
0

У меня есть фрагмент со списком:как сохранить состояние фрагмента

public class GuestsList extends Fragment implements AdapterView.OnItemClickListener { 
    private GuestsListAdapter adapter; 
    private FragmentTransaction fTrans; 
    private Fragment guestFragment; 
    private ArrayList<GuestBean> guests; 
    private ListView list; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.guestlist, null); 

     guests = new ArrayList<GuestBean>(); 
     list = (ListView) v.findViewById(R.id.gustLIST); 
     adapter = new GuestsListAdapter(getActivity(), guests); 
     list.setOnItemClickListener(this); 

     new NewThread().execute(); 

     return v; 
    } 

    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
     fTrans = getFragmentManager().beginTransaction(); 
     guestFragment = new Guest(); 
     fTrans.replace(R.id.content_frame, guestFragment); 
     fTrans.addToBackStack(null); 
     fTrans.commit(); 
    } 

    public class NewThread extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... strings) { 
      //load data to guests 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      list.setAdapter(adapter); 
      progressDialog.cancel(); 
     } 
    } 
} 

При нажатии на элемент я создаю новый фрагмент Гость и старый фрагмент были помещены в backstack. Когда я нахожусь в новом фрагменте и нажимаю кнопку «Назад», открывается фрагмент «ГостиList», который был в задней части экрана, и снова данные, загруженные из Интернета. Я хочу, чтобы они были сохранены при создании нового фрагмента, и когда вы нажимаете кнопку «Назад» для перезагрузки.

+0

Возможно, это может вам помочь: http://stackoverflow.com/questions/17252236/how-to-persist-fragment-data-after-backstack-transactions – manao

ответ

0

простое решение заключается в использовании «добавить» вместо «заменить» в транзакции фрагмент

fTrans.add(R.id.content_frame, guestFragment); 

Он не должен создавать новый фрагмент, когда вы будете нажимать назад, но это не очень хорошее решение, если у вас есть много фрагментов (когда у меня было много фрагментов и использовалось приложение «добавить»)

Вы можете создать кеш объектов в пользовательском классе Application и получить объекты из класса приложения.

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