2014-10-27 39 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(); 
     } 
    } 
} 

當您點擊我創建一個新片段客戶和老片段項目放置在堆棧中。 當我在一個新的片段中,然後單擊返回按鈕打開片段GuestsList,它位於backstack中,並再次從Internet下載數據。我希望在創建新片段時保存它們,並且在單擊後退按鈕時重新加載。

+0

也許這可以幫到你: http://stackoverflow.com/questions/17252236/how-to-persist-fragment-data-after-backstack-transactions – manao 2014-10-27 08:34:33

回答

0

最簡單的解決方法是使用「添加」,而不是在你的片段交易「取代」

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

它不應該創建新的片段時,你會壓回,但如果你有這不是很好的解決方案很多片段(當我有很多片段,並且使用「添加」應用程序時)

您可以在自定義Application類中創建對象緩存並從應用程序類獲取對象。