Java ListView数据重复

Java ListView数据重复,java,android,listview,adapter,Java,Android,Listview,Adapter,解析后的XML中的数据被送入ArrayList itemList。然后,满足条件的结果将添加到filteredList,而filteredList又绑定到要在我的ListView中显示的适配器。但是,添加到filteredList的数据正在重复(两次),我不明白为什么。也许有人能为我指出这一点吗?我已经盯着它看了一段时间了,哈哈 以下是MainActivity.java中的函数 private void FilterList() { ListView lv = (ListVie

解析后的XML中的数据被送入ArrayList itemList。然后,满足条件的结果将添加到filteredList,而filteredList又绑定到要在我的ListView中显示的适配器。但是,添加到filteredList的数据正在重复(两次),我不明白为什么。也许有人能为我指出这一点吗?我已经盯着它看了一段时间了,哈哈

以下是MainActivity.java中的函数

private void FilterList() {

        ListView lv = (ListView) findViewById(R.id.info);    //locate listview

        for (int i = 0; i < itemList.size(); i++) //cycle arraylist
        {
            try {
                //convert startdate, endDate
                Date cDate = dateFormat.parse(currDate);     //get/convert selected date
                Date stDate = dateFormat.parse(itemList.get(i).startDate);
                Date enDate = dateFormat.parse(itemList.get(i).endDate);
                //compare, if active true then add
                if ((cDate.after(stDate)) && (cDate.before(enDate))){
                    //add itemList element to filterList
                    filteredList.add(itemList.get(i));
                    Log.d("DEBUG CHECKME", "added to filteredList: ");
                }
            } catch (java.text.ParseException e) {
                e.printStackTrace();
            }
        }

        itemAdapter = new PostItemAdapter(mcontext, R.layout.postitem, filteredList);   //pass results into adapter
        lv.setAdapter(itemAdapter); //bind listview & adapter
            Log.d("DEBUG CHECKME", "lv.setAdapter");
    }
private void FilterList(){
ListView lv=(ListView)findViewById(R.id.info);//查找ListView
对于(int i=0;i
下面是我的适配器类:

public class PostItemAdapter extends ArrayAdapter<Item>
{
    private LayoutInflater inflater;
    private ArrayList<Item> datas;

    public PostItemAdapter(Context context, int textViewResourceId, ArrayList<Item> objects)
    {
        super(context, textViewResourceId, objects);

        inflater = ((Activity) context).getLayoutInflater();
        datas = objects;
    }

    //class to hold view object references
    static class ViewHolder
    {
        TextView itemTitleView;
        ImageView itemThumbView;
    }

    public View getView(int position, View convertView, ViewGroup parent)
    {
        ViewHolder viewHolder;

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.postitem, null);

            viewHolder = new ViewHolder();
            viewHolder.itemThumbView = (ImageView) convertView.findViewById(R.id.itemThumb);
            viewHolder.itemTitleView = (TextView) convertView.findViewById(R.id.itemTitleLabel);
            //viewHolder.itemDateView = (TextView) convertView.findViewById(R.id.itemDateLabel);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        if (datas.get(position).itemThumbUrl == null)
        {
            viewHolder.itemThumbView.setImageResource(R.drawable.test);
        }

        viewHolder.itemTitleView.setText(datas.get(position).itemTitle);

        return convertView;
    }
}
公共类PostItemAdapter扩展了ArrayAdapter
{
私人充气机;
私有数组列表数据;
public PostItemAdapter(上下文上下文、int-textViewResourceId、ArrayList对象)
{
超级(上下文、textViewResourceId、对象);
充气器=((活动)上下文).getLayoutFlater();
数据=对象;
}
//类来保存视图对象引用
静态类视窗夹
{
文本视图项目标题视图;
ImageView项目视图;
}
公共视图getView(int位置、视图转换视图、视图组父视图)
{
持票人持票人;
if(convertView==null){
convertView=充气机充气(R.layout.postitem,空);
viewHolder=新的viewHolder();
viewHolder.itemThumbView=(ImageView)convertView.findViewById(R.id.itemThumb);
viewHolder.itemTitleView=(TextView)convertView.findViewById(R.id.itemTitleLabel);
//viewHolder.itemDateView=(TextView)convertView.findViewById(R.id.itemDateLabel);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
if(datas.get(position).itemThumbUrl==null)
{
viewHolder.itemThumbView.setImageResource(R.drawable.test);
}
viewHolder.itemTitleView.setText(data.get(position.itemTitle));
返回视图;
}
}

试试这个,我希望它能帮助你

 @Override
        public View getView(final int position, View convertView, final ViewGroup parent) {
            View row = null;

            if (convertView == null) {
                LayoutInflater inflater = ((Activity) context).getLayoutInflater();
                row = inflater.inflate(R.layout.postitem, parent, false);
            } else {
                row = convertView;
            }
             filteredList datas= rowItems.get(position);
            try {
                TextView itemTitleView = (TextView) convertView.findViewById(R.id.itemTitleLabel);
               itemTitleView.setText(datas.itemTitle);


            } catch (Exception e) {

            }

            try {
            ImageView     itemThumbView = (ImageView) convertView.findViewById(R.id.itemThumb);
    itemThumbView.setImageResource(R.drawable.test);
            } catch (Exception e) {

            }




            });

            return row;
        }

在将列表绑定到适配器之前记录列表的大小。1。检查调用
FilterList
函数的次数。2.在添加新结果之前,请尝试清除
filteredList
。您的适配器代码正常。我会使用调试器来检查为什么您的项会被添加到列表中两次。我建议在“FilterList()”中添加一条调试语句,并检查被调用的次数。感谢各位,它确实被调用了两次(必须是我的黑客日期选择器)。