ListView是否显示重复项?

ListView是否显示重复项?,listview,android-listview,Listview,Android Listview,我有一个列表视图,其中列表项由三个视图组成。图像、标题和副标题。当我调用它时,它会在每个第四个项目之后重复项目。例如 Item 0 Item 1 Item 2 Item 3 Item 0 Item 1 Item 2 Item 3 等等 列表项目视图.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an

我有一个列表视图,其中列表项由三个视图组成。图像、标题和副标题。当我调用它时,它会在每个第四个项目之后重复项目。例如

Item 0
Item 1
Item 2
Item 3
Item 0
Item 1
Item 2
Item 3
等等

列表项目视图.xml

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="6dp" >

   <ImageView
    android:id="@+id/listImg"
    android:layout_width="80dp"
    android:layout_height="80dp" />

<TextView
    android:id="@+id/listItemTxt"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="90dp"
    android:layout_marginStart="90dp"
    android:textColor="#D8000000"
    android:textSize="20sp"
   />

<TextView
    android:id="@+id/listSubtxt"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/listItemTxt"
    android:layout_marginLeft="90dp"
    android:layout_marginStart="90dp"
    android:ellipsize="marquee"
    android:textColor="#D8000000"
    android:textSize="15sp" />

</RelativeLayout>
<?xml version="1.0" encoding="UTF-8"?>
   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</ListView>
</LinearLayout>

列表视图.xml

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="6dp" >

   <ImageView
    android:id="@+id/listImg"
    android:layout_width="80dp"
    android:layout_height="80dp" />

<TextView
    android:id="@+id/listItemTxt"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="90dp"
    android:layout_marginStart="90dp"
    android:textColor="#D8000000"
    android:textSize="20sp"
   />

<TextView
    android:id="@+id/listSubtxt"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/listItemTxt"
    android:layout_marginLeft="90dp"
    android:layout_marginStart="90dp"
    android:ellipsize="marquee"
    android:textColor="#D8000000"
    android:textSize="15sp" />

</RelativeLayout>
<?xml version="1.0" encoding="UTF-8"?>
   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</ListView>
</LinearLayout>

ListViewAdapter.java

public class ListViewAdapter extends ArrayAdapter<Resource>{
private Activity context;
private ArrayList<Resource> resList;

public ListViewAdapter(Context context, ArrayList<Resource> reslist) {
    super(context, R.layout.list_item_view, reslist);
    this.context = (Activity) context;
    this.resList = reslist;
}
static class ViewHolder {
    private TextView itemName;
    private TextView subItemName;
    private ImageView thumb_image;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder mViewHolder = null;
    if (convertView == null) {
        mViewHolder = new ViewHolder();

        LayoutInflater vi = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        convertView = vi.inflate(R.layout.list_item_view,
                parent, false);
        mViewHolder.itemName = (TextView) convertView
                .findViewById(R.id.listItemTxt); // title
        mViewHolder.subItemName = (TextView) convertView.findViewById(R.id.listSubtxt);//subtitle
        mViewHolder.thumb_image = (ImageView) convertView
                .findViewById(R.id.listImg); // thumb image
        mViewHolder.itemName.setText(resList.get(position).title);
        //Log.e("TITLE:",">>"+items[position]);
        mViewHolder.subItemName.setText("Last Updated: "+resList.get(position).date_updated);
        Bitmap bm = DecodeBitmap.decodeSampledBitmapFromUri(
                resList.get(position).thumbnile_path, 220, 220);
        if(bm != null)
            mViewHolder.thumb_image.setImageBitmap(bm);
        else
            mViewHolder.thumb_image.setImageResource(R.drawable.thumb_img);
        convertView.setTag(mViewHolder);
    } else {
        mViewHolder = (ViewHolder) convertView.getTag();
    }
    Log.e("getView " + position, ">>" + convertView);
    return convertView;
}
}
公共类ListViewAdapter扩展了ArrayAdapter{
私人活动语境;
私有数组列表;
公共ListViewAdapter(上下文,ArrayList reslist){
super(上下文,R.layout.list\u项目视图,reslist);
this.context=(活动)上下文;
this.resList=resList;
}
静态类视窗夹{
私有文本视图项目名称;
私有文本视图子项名称;
私有图像查看拇指图像;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
ViewHolder mViewHolder=null;
if(convertView==null){
mViewHolder=新的视图持有者();
LayoutInflater vi=(LayoutInflater)上下文
.getSystemService(上下文布局\充气机\服务);
convertView=vi.充气(右布局列表项目视图,
父母,假);
mViewHolder.itemName=(TextView)convertView
.findViewById(R.id.listItemTxt);//标题
mViewHolder.subItemName=(TextView)convertView.findViewById(R.id.ListSubText);//副标题
mViewHolder.thumb_image=(ImageView)convertView
.findviewbyd(R.id.listImg);//拇指图像
mViewHolder.itemName.setText(resList.get(position.title));
//Log.e(“标题:”、“>>”+项目[位置]);
mViewHolder.subItemName.setText(“上次更新:+resList.get(position.date\u Updated”);
位图bm=解码位图.decodeSampledBitmapFromUri(
resList.get(position).thumbleu路径,220,220);
如果(bm!=null)
mViewHolder.thumb_image.setImageBitmap(bm);
其他的
mViewHolder.thumb\u image.setImageResource(R.drawable.thumb\u img);
setTag(mViewHolder);
}否则{
mViewHolder=(ViewHolder)convertView.getTag();
}
Log.e(“getView”+位置“>>”+转换视图);
返回视图;
}
}

任何帮助都将不胜感激。谢谢。

您不正确地实现了ViewHolder模式。这应该行得通

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder mViewHolder = null;
    if (convertView == null) {
        mViewHolder = new ViewHolder();

        LayoutInflater vi = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        convertView = vi.inflate(R.layout.list_item_view,
                parent, false);
        mViewHolder.itemName = (TextView) convertView.findViewById(R.id.listItemTxt);
        mViewHolder.subItemName = (TextView) convertView.findViewById(R.id.listSubtxt);
        mViewHolder.thumb_image = (ImageView) convertView.findViewById(R.id.listImg);

        convertView.setTag(mViewHolder);
    }
    mViewHolder = (ViewHolder) convertView.getTag();
    mViewHolder.itemName.setText(resList.get(position).title);
    mViewHolder.subItemName.setText("Last Updated: "+ resList.get(position).date_updated);
    Bitmap bm = DecodeBitmap.decodeSampledBitmapFromUri(
            resList.get(position).thumbnile_path, 220, 220);
    if(bm != null) {
        mViewHolder.thumb_image.setImageBitmap(bm);
    } else {
        mViewHolder.thumb_image.setImageResource(R.drawable.thumb_img);
    }
    convertView.setTag(mViewHolder);

    return convertView;
}

您是否尝试重写ListViewAdapter的getCount()方法?是的,没有任何更改@doraremove
convertView.setTag(mViewHolder)底部第三行非常好!立刻工作!!非常感谢@Shuvo