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