删除列表视图中的重复行 Android

Remove duplicate rows in List View Android

我需要从 ListView 中删除重复的行 Android 下面是我的 Adapter 代码。 我有一个 HashMap,它由日期和 Bean 的 ArrayList 组成 Class 需要设置的数据如下图

屏幕 1:当我从 15 到 20 过滤数据时,我得到一个下面的列表,对于 15 到 19,对于 20 它从 15 复制的数据看起来很好

屏幕 2:但是当我滚动查看 20 的数据时,它重复了一个臭名昭著的问题,即隐蔽视图看到为日期 15 映射的数据

屏幕 3:此屏幕提供第 20 个日期的真实数据,只有 1 行。

下面是我的适配器代码。如果我需要更多支架或任何其他建议,请提出建议。

public class AdapterReport extends BaseAdapter
{

    private ArrayList<LinearLayout> mLinearLayoutArry;
    private Context con;
    private ArrayList<String> keySet;
    private HashMap<String, ArrayList<FFBDetailsBean>> hashMapBeanList;

    public AdapterReport(Context con ,HashMap<String, ArrayList<FFBDetailsBean>> hashMapBeanList)
    {
        // TODO Auto-generated constructor stub
        this.con = con;
        this.hashMapBeanList = hashMapBeanList;
        keySet = new  ArrayList<String>();
        Iterator it = hashMapBeanList.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry pair = (Map.Entry)it.next();
            System.out.println(pair.getKey() + " = " + pair.getValue());
            keySet.add(""+pair.getKey());

        }

        Collections.sort(keySet);


    }


    @Override
    public int getCount()
    {
        // TODO Auto-generated method stub
        return hashMapBeanList.size();
    }

    @Override
    public Object getItem(int arg0)
    {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int arg0)
    {
        // TODO Auto-generated method stub
        return 0;
    }



    public class ViewHolder
    {
        LinearLayout mLinearLayout ;
        TextView mDateTxt;


        Animation anim;

        ViewHolder(Context context)
        {
        }
    }


    @Override
    public View getView(int position, View convertView, ViewGroup arg2)
    {
        final ViewHolder holder;
        ViewGroup vg = null;
        LayoutInflater inflater = (LayoutInflater) con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        ArrayList<FFBDetailsBean> ffbBeanListArry = hashMapBeanList.get(keySet.get(position));

        if (convertView == null)
        {
            convertView = inflater.inflate(R.layout.report_between_days_content_layout, vg);
            holder = new ViewHolder(con);
            holder.mDateTxt = (TextView)convertView.findViewById(R.id.componentDate);
            holder.mLinearLayout = (LinearLayout)convertView.findViewById(R.id.contentListLinearLayout);

            for (int i = 0; i < ffbBeanListArry.size(); i++) {

                View view; 
                LayoutInflater inflater2 = (LayoutInflater)con.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
                view = inflater2.inflate(R.layout.report_between_days_content_inner_layout, null);

                LinearLayout innerLayoutLinear  = (LinearLayout)view.findViewById(R.id.innerLinearLayout);

                TextView receiptDateValue = (TextView)view.findViewById(R.id.receiptNoValue);
                receiptDateValue.setText(ffbBeanListArry.get(i).getmFFBReceiptNo());

                TextView farmerCodeValue = (TextView)view.findViewById(R.id.farmerCodeValue);
                farmerCodeValue.setText(ffbBeanListArry.get(i).getmFFBFarmerCode());


                TextView quantityValue = (TextView)view.findViewById(R.id.quantityValue);
                quantityValue.setText(ffbBeanListArry.get(i).getmFFBQuantity());

                holder.mLinearLayout.addView(innerLayoutLinear);

            }

            convertView.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.mDateTxt.setText(keySet.get(position));

        return convertView;
    }
Add listView.invalidateViews(); and listView.notifyDatasetChanged()

可能会对你有所帮助

按如下方式编辑了我的代码并且它起作用了:

holder.mLinearLayout.removeAllViews(); 对我有用

@Override
    public View getView(int position, View convertView, ViewGroup arg2)
    {
        final ViewHolder holder;
        ViewGroup vg = null;
        LayoutInflater inflater = (LayoutInflater) con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        ArrayList<FFBDetailsBean> ffbBeanListArry = hashMapBeanList.get(keySet.get(position));

        if (convertView == null)
        {
            convertView = inflater.inflate(R.layout.report_between_days_content_layout, vg);
            holder = new ViewHolder(con);
            holder.mDateTxt = (TextView)convertView.findViewById(R.id.componentDate);
            holder.mLinearLayout = (LinearLayout)convertView.findViewById(R.id.contentListLinearLayout);

            convertView.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.mDateTxt.setText(keySet.get(position));
        holder.mLinearLayout.removeAllViews();
        for (int i = 0; i < ffbBeanListArry.size(); i++) {

            View view; 
            LayoutInflater inflater2 = (LayoutInflater)con.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
            view = inflater2.inflate(R.layout.report_between_days_content_inner_layout, null);

            LinearLayout innerLayoutLinear = (LinearLayout)view.findViewById(R.id.innerLinearLayout);

            TextView receiptDateValue = (TextView)view.findViewById(R.id.receiptNoValue);
            receiptDateValue.setText(ffbBeanListArry.get(i).getmFFBReceiptNo());

            TextView farmerCodeValue = (TextView)view.findViewById(R.id.farmerCodeValue);
            farmerCodeValue.setText(ffbBeanListArry.get(i).getmFFBFarmerCode());


            TextView quantityValue = (TextView)view.findViewById(R.id.quantityValue);
            quantityValue.setText(ffbBeanListArry.get(i).getmFFBQuantity());

            holder.mLinearLayout.addView(innerLayoutLinear);

        }




        return convertView;
    }