Android Fragment listview重复加载 10
有三个fragment相互切换,可以每次回到第一个fragment的时候,原来的数据都会重新加载。为什么?代码如下:@OverridepublicViewonCreate...
有三个fragment相互切换,可以每次回到第一个fragment的时候,原来的数据都会重新加载。为什么?
代码如下:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
v = inflater.inflate(R.layout.tab01, container,false);
init();
data();
return v;
}
private void init() {
mContext = YijiedanTabFragment.this.getActivity();
// lv_order=(ListView) v.findViewById(R.id.tab01);
lv = (ListView) v.findViewById(R.id.tab01);
}
private void data() {
User u1 = new User();
u1.setName("余先生");
u1.setTitle("修的马桶");
u1.setTime("20150912");
User u2 = new User();
u2.setName("张先生");
u2.setTitle("厨卫抢修");
u2.setTime("20150912");
list.add(u1);
list.add(u2);
adapter = new MyOrderAdapter(mContext, list);
lv.setAdapter(adapter);
}
适配器的代码如下:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder hold;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item, parent, false);
hold = new ViewHolder();
hold.tv_name = (TextView) convertView.findViewById(R.id.tv_username);
hold.tv_time = (TextView) convertView.findViewById(R.id.tv_time);
hold.tv_title = (TextView) convertView.findViewById(R.id.tv_title);
convertView.setTag(hold);
} else {
hold = (ViewHolder) convertView.getTag();
}
hold.tv_name.setText(list.get(position).getName());
hold.tv_time.setText(list.get(position).getTime());
hold.tv_title.setText(list.get(position).getTitle());
return convertView;
} 展开
代码如下:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
v = inflater.inflate(R.layout.tab01, container,false);
init();
data();
return v;
}
private void init() {
mContext = YijiedanTabFragment.this.getActivity();
// lv_order=(ListView) v.findViewById(R.id.tab01);
lv = (ListView) v.findViewById(R.id.tab01);
}
private void data() {
User u1 = new User();
u1.setName("余先生");
u1.setTitle("修的马桶");
u1.setTime("20150912");
User u2 = new User();
u2.setName("张先生");
u2.setTitle("厨卫抢修");
u2.setTime("20150912");
list.add(u1);
list.add(u2);
adapter = new MyOrderAdapter(mContext, list);
lv.setAdapter(adapter);
}
适配器的代码如下:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder hold;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item, parent, false);
hold = new ViewHolder();
hold.tv_name = (TextView) convertView.findViewById(R.id.tv_username);
hold.tv_time = (TextView) convertView.findViewById(R.id.tv_time);
hold.tv_title = (TextView) convertView.findViewById(R.id.tv_title);
convertView.setTag(hold);
} else {
hold = (ViewHolder) convertView.getTag();
}
hold.tv_name.setText(list.get(position).getName());
hold.tv_time.setText(list.get(position).getTime());
hold.tv_title.setText(list.get(position).getTitle());
return convertView;
} 展开
展开全部
你的adapter内的数据只有两条,不出意外的话这两条都占不满屏幕.
既然占不满屏幕,那 listview 里面的 item view 就不会触发复用罗辑.
所以你切回到含有这个 listview 的界面时,listview 就会重新绘制屏幕内需要的 item view, 你的那两条数据对应的 view 就会全部绘制一遍.
假设你的 adapter 内有 100 条数据,屏幕内只能显示5条数据,那这样的话 listview 始终只保持有限的 item view 进行复用,这时候从别处切过来, listview 就只会加载屏幕内显示的那几个view.
所以如果你问的是listview每次都把数据加载一遍的问题,那原因就是你数据太少了...
如果你问的是fragment每次都重新加载的问题 (就是说每次切回该fragment都会触发fragment的onCreate方法),那就略复杂些,影响fragment生命周期的因素就很多了,根据代码写法不一样,其生命周期也差别很大.
如果是fragment每次都触发onCreate()方法的问题,请提供activity中切换fragment的代码.
既然占不满屏幕,那 listview 里面的 item view 就不会触发复用罗辑.
所以你切回到含有这个 listview 的界面时,listview 就会重新绘制屏幕内需要的 item view, 你的那两条数据对应的 view 就会全部绘制一遍.
假设你的 adapter 内有 100 条数据,屏幕内只能显示5条数据,那这样的话 listview 始终只保持有限的 item view 进行复用,这时候从别处切过来, listview 就只会加载屏幕内显示的那几个view.
所以如果你问的是listview每次都把数据加载一遍的问题,那原因就是你数据太少了...
如果你问的是fragment每次都重新加载的问题 (就是说每次切回该fragment都会触发fragment的onCreate方法),那就略复杂些,影响fragment生命周期的因素就很多了,根据代码写法不一样,其生命周期也差别很大.
如果是fragment每次都触发onCreate()方法的问题,请提供activity中切换fragment的代码.
展开全部
private View view;//在fragment中声明全局变量
//然后在onCreateView方法中进行判断即可
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if(null != view){//此处无需改动
ViewGroup parent = (ViewGroup) view.getParent();
if (null != parent) {
parent.removeView(view);
}
}else{//这里写你自己的代码
view = inflater.inflate(R.layout.fragment_data_list, container, false);
//你的页面初始化方法
}
return view;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询