在 ListView 中重复项目?它不能正常工作,第一个项目显示在第三个位置,并再次从第一个项目重复
Posted
技术标签:
【中文标题】在 ListView 中重复项目?它不能正常工作,第一个项目显示在第三个位置,并再次从第一个项目重复【英文标题】:Repeating items in ListView? its don't working fine first item display at 3rd position and repeats again from the 1st item again 【发布时间】:2019-03-24 01:26:46 【问题描述】:一切正常,但现在我不明白发生了什么,我有 72 个项目要显示在 listView 中,第一个项目显示在第 3 位,其他项目从第一个项目再次重复显示又来了??
package com.example.kishorsinh.yogaapp.Adapter;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.kishorsinh.yogaapp.Model.InstructionsData;
import com.example.kishorsinh.yogaapp.R;
import java.util.List;
public class InstructionsAdapter extends BaseAdapter
Context applicationContext;
List<InstructionsData> iData;
public InstructionsAdapter(Context applicationContext, List<InstructionsData> iData)
this.applicationContext=applicationContext;
this.iData=iData;
@Override
public int getCount()
return iData.size();
@Override
public Object getItem(int position)
return iData.get(position);
@Override
public long getItemId(int position)
return position;
@Override
public View getView(int position, View convertView, ViewGroup parent)
MyViewHolder myViewHolder;
if(convertView==null)
LayoutInflater layoutInflater=(LayoutInflater) applicationContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView=layoutInflater.inflate(R.layout.instructions_list,parent,false);
myViewHolder=new MyViewHolder();
myViewHolder.imageView=(ImageView) convertView.findViewById(R.id.inst_image);
myViewHolder.textView1=(TextView) convertView.findViewById(R.id.inst_name);
//myViewHolder.textView2=(TextView) convertView.findViewById(R.id.detail_inst);
InstructionsData instructionsData=iData.get(position);
myViewHolder.imageView.setImageResource(instructionsData.getImage_inst());
myViewHolder.textView1.setText(instructionsData.getInstructionslist());
//myViewHolder.textView2.setText(instructionsData.getInstructionslist());
convertView.setTag(myViewHolder);
else
myViewHolder=(MyViewHolder)convertView.getTag();
return convertView;
private class MyViewHolder
ImageView imageView;
TextView textView1;
//TextView textView2;
它只是重复您可以在下图中看到的所有列表名称...
https://i.stack.imgur.com/8MkM6.jpg
【问题讨论】:
删除这个if(convertView==null)
如果工作正常,请将答案标记为已接受
我的建议:您应该保留重用视图的逻辑,以便更顺畅地滚动并更改您的 getView 逻辑,按照我在答案中发布的操作。
【参考方案1】:
如你所说
第一项显示在第 3 个位置并不能正常工作,而其他项又从第一项开始重复
您需要为每个项目绑定数据而没有任何条件,就像您仅在converconvertView == null
时绑定数据一样
所以删除这个
if(convertView==null)
条件和始终绑定数据,没有任何条件
【讨论】:
【参考方案2】:您的getView方法逻辑错误,重复项的出现是由于视图重用引起的,请更改您的getView方法,如以下代码sn-p。
@Override
public View getView(int position, View convertView, ViewGroup parent)
MyViewHolder myViewHolder;
if(convertView==null)
LayoutInflater layoutInflater=(LayoutInflater) applicationContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView=layoutInflater.inflate(R.layout.instructions_list,parent,false);
myViewHolder=new MyViewHolder();
myViewHolder.imageView=(ImageView) convertView.findViewById(R.id.inst_image);
myViewHolder.textView1=(TextView) convertView.findViewById(R.id.inst_name);
//myViewHolder.textView2=(TextView) convertView.findViewById(R.id.detail_inst);
convertView.setTag(myViewHolder);
else
myViewHolder=(MyViewHolder)convertView.getTag();
InstructionsData instructionsData=iData.get(position);
myViewHolder.imageView.setImageResource(instructionsData.getImage_inst());
myViewHolder.textView1.setText(instructionsData.getInstructionslist());
//myViewHolder.textView2.setText(instructionsData.getInstructionslist());
return convertView;
【讨论】:
以上是关于在 ListView 中重复项目?它不能正常工作,第一个项目显示在第三个位置,并再次从第一个项目重复的主要内容,如果未能解决你的问题,请参考以下文章