我有一个带有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下载数据。我希望在创建新片段时保存它们,当您单击后退按钮进行重新加载时。
答案 0 :(得分:0)
最简单的解决方案是在片段交易中使用“添加”而不是“替换”
fTrans.add(R.id.content_frame, guestFragment);
当你按下它时不应该创建新的片段,但如果你有很多片段(当我有很多片段并使用“添加”应用程序滞后时)这不是一个很好的解决方案。
您可以在自定义Application类中创建对象缓存,并从应用程序类中获取对象。