解决fragment中listview数据丢失问题
private ListViewForScrollView
mListview;
private FindShareAdatpter
shareAdatpter =
null;
private List<TaskFindInfo>
tastlistdata=
null;
首先分析下它的生命周期,与 activity 不同的是,这个 rootivew 被重复创建过
那listview 肯定也被重复初始化,自然它的
getAdapter 就为空了,那就相当于没有内容了;
但整个 fragment 只被创建过一次,并没有走
onDestroy
死亡 的方法;
一个类中的私有成员只有在它 上层类被回收时才会被回收, 其实
tastlistdata
和
shareAdatpter 都没有被回收,也就不需要反复加载数据了;
10-24 09:17:22.866 13330-13330/
nabei.com.automat D/RonyDebug: onCreate
10-24 09:17:22.867 13330-13330/
nabei.com.automat D/RonyDebug: onCreateView
10-24 09:17:22.956 13330-13330/
nabei.com.automat D/RonyDebug: onActivityCreated
10-24 09:17:22.966 13330-13330/
nabei.com.automat D/RonyDebug: onResume
10-24 09:18:00.205 13330-13330/
nabei.com.automat D/RonyDebug: onCreateView
10-24 09:18:00.212 13330-13330/
nabei.com.automat D/RonyDebug: onActivityCreated
10-24 09:18:00.212 13330-13330/
nabei.com.automat D/RonyDebug: onResume
10-24 09:18:38.212 13330-13330/
nabei.com.automat D/RonyDebug: onCreateView
10-24 09:18:38.224 13330-13330/
nabei.com.automat D/RonyDebug: onActivityCreated
10-24 09:18:38.224 13330-13330/
nabei.com.automat D/RonyDebug: onResume
关键代码:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if ( mListview.getAdapter()==null) {
if (shareAdatpter==null) {
shareAdatpter = new FindShareAdatpter(getActivity());
new HttpRest(getActivity(), mhandler, 1).get_findActivityList();
}else{
showlist(tastlistdata);
}
}
}
完整代码,并不需要对 其它数据作任何处理:
public class MainpageFind extends Fragment {
private ListViewForScrollView mListview;
private FindShareAdatpter shareAdatpter = null;
private List<TaskFindInfo> tastlistdata=null;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if ( mListview.getAdapter()==null) {
if (shareAdatpter==null) {
shareAdatpter = new FindShareAdatpter(getActivity());
new HttpRest(getActivity(), mhandler, 1).get_findActivityList();//网络请求加载数据
}else{
showlist(tastlistdata);
}
}
}
private Handler mhandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
List<TaskFindInfo> taskinfos = (List<TaskFindInfo>) msg.obj;
tastlistdata=taskinfos;
showlist(taskinfos);
}
}
};
private void showlist(List<TaskFindInfo> tastlist) {
shareAdatpter.SetList(tastlist);
mListview.setAdapter(shareAdatpter);
shareAdatpter.notifyDataSetChanged();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.mainpage3, null);
bbstv = (TextView) view.findViewById(R.id.bbstv);
helptv = (TextView) view.findViewById(R.id.helptv);
helptv.setOnClickListener(this);
bbstv.setOnClickListener(this);
mListview = view.findViewById(R.id.actionlist);
return view;
}
}