繁体   English   中英

当选中标签更改listview项目重复时

[英]When selected tab change listview items duplicating

我有一个四选项卡应用程序。 一个选项卡有一个列表视图。 当应用程序首先打开时,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。 但我不知道我该怎么做。 等待你的评论。

谢谢。

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

items.clear();

在你的onCreate()方法中

尝试这个

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服务或数据库值,并检查您是否正确添加到列表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM