如何保存片段的状态

时间:2014-10-27 08:26:04

标签: android

我有一个带有list的片段:

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();
        }
    }
}

当您点击某个项目时,我会创建一个新片段,将Guest和旧片段放在backstack中。 当我在一个新片段中并单击后退按钮时,会打开片段GuestsList,它位于backstack中,并再次从Internet下载数据。我希望在创建新片段时保存它们,当您单击后退按钮进行重新加载时。

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是在片段交易中使用“添加”而不是“替换”

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

当你按下它时不应该创建新的片段,但如果你有很多片段(当我有很多片段并使用“添加”应用程序滞后时)这不是一个很好的解决方案。

您可以在自定义Application类中创建对象缓存,并从应用程序类中获取对象。