2016-05-23 174 views
0

我有一个四选项卡应用程序。一个选项卡有一个列表视图。当应用程序首先打开时,在listview中一切正常。但是,当我更改标签,然后列表视图项目重复。我如何找到解决这个问题的方法?当选择选项卡更改列表视图项目重复

表3 onCreate方法;

final List<k_lbir_c> items = new ArrayList<k_lbir_c>(); 
listAdapter adapter; 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     ... 

     final ListView listView = (ListView) view.findViewById(R.id.listView); 
     adapter = new listAdapter(getActivity(),items); 
     listView.setAdapter(adapter); 

     ... 
} 

适配器类别

class listAdapter extends BaseAdapter { 

    private LayoutInflater mInflater; 
    private List<k_lbir_c> items; 

    public listAdapter(Activity activity,List<k_lbir_c> items){ 
     mInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     this.items = items; 
    } 

    @Override 
    public int getCount() { 
     return this.items.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return this.items.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     mViewHolder mVHolder; 

     if(convertView==null) 
     { 
      convertView = mInflater.inflate(R.layout.k_lbir,null); 
      mVHolder = new mViewHolder(); 
      convertView.setTag(mVHolder); 
     } 
     else 
     { 
      mVHolder = (mViewHolder)convertView.getTag(); 
     } 

     mVHolder.texvV = (TextView)convertView.findViewById(R.id.textView); 
     mVHolder.imageV = (ImageView)convertView.findViewById(R.id.k_lbir_iv); 

     k_lbir_c item = items.get(position); 

     mVHolder.texvV = tvDetails(convertView,R.id.textView,item.getIsim()); 
     mVHolder.imageV = ivDetails(convertView,R.id.k_lbir_iv,item.getImaj()); 

     return convertView; 
    } 

    private TextView tvDetails(View v,int ResId,String Text){ 
     TextView textView = (TextView)v.findViewById(ResId); 
     textView.setText(Text); 
     return textView; 
    } 

    private ImageView ivDetails(View v,int ResId,Drawable image){ 
     ImageView imageView = (ImageView)v.findViewById(ResId); 
     imageView.setImageDrawable(image); 
     return imageView; 
    } 

    private static class mViewHolder{ 
     TextView texvV; 
     ImageView imageV; 
    } 
} 

我想我必须清除的ListView具有压倒一切的片段生命循环方法。但我不知道我该怎么做。等待你的评论。

谢谢。

回答

1

已写入的答案将解决概率问题lem,但是这种行为的主要原因似乎是你使用Singleton Fragments,这也是一个好方法。 所以问题是,当你切换标签时,碎片从ViewPager中被销毁,但是碎片对象本身仍然存在,当它返回时,对象被再次用于插入视图分页器,并且onCreateView将被调用再次,这里的解决方案(在已经写好的答案旁边)是设置ViewPager可以处理的碎片数量而不会破坏它。默认情况下,ViewPager只保留一个片段旁边的当前显示的片段,超过这将被销毁,您可以使用viewpager.setOffscreenPageLimit(int)设置视图寻呼机可以容纳片段的数量不破坏,onCreate不会被调用再次。

+0

它的作品,但内存问题? –

+0

如果您在每个片段中只有一个ListView,我已经有一个带有片段的项目,并将偏移限制设置为20以上,并且永远不会出现内存问题。如果你有内存问题,那么你必须尝试其他答案之一,这样你就可以从ViewPager启用添加/删除片段,但是如果它们已经被加载的话会阻止多次加载项目 –

+1

非常感谢。它正在工作。 accualy其他答案工作,但这是正确的方法。 –

1

在onCreate()方法添加

items.clear(); 

+0

工作。谢谢。 –

0

试试这个

List<k_lbir_c> items=new ArrayList<>(); 

public listAdapter(Activity activity,List<k_lbir_c> items){ 
if(this.items.size>0) 
{ 
this.items.clear; 
} 
mInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
this.items = items; 
} 

不过如果你得到重复,请检查您的Web服务或数据库中的值,并检查你是正确添加到列表中

相关问题