Android 列表视图重复项

Android 列表视图重复项,android,android-layout,listview,android-activity,Android,Android Layout,Listview,Android Activity,我试图创建一个包含大量数据的listview,但在构建时,listview上的项数据会多次重复 这是myJava自定义适配器 @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Ac

我试图创建一个包含大量数据的listview,但在构建时,listview上的项数据会多次重复

这是myJava自定义适配器

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item, null);
        holder = new ViewHolder();

        holder.Name = (TextView) convertView.findViewById(R.id.Recipe_Name);
        holder.Image_Block = (ImageView) convertView.findViewById(R.id.Recipe_Image);
        holder.Text_Recipe = (TextView) convertView.findViewById(R.id.Recipe_Text);
        holder.Text_Rarity = (TextView) convertView.findViewById(R.id.Recipe_Rarity);

        RowItem row_pos = rowItems.get(position);

        holder.Image_Block.setImageResource(row_pos.getImage_Block());
        holder.Name.setText(row_pos.getName());
        holder.Text_Recipe.setText(row_pos.getText_Recipe());
        holder.Text_Rarity.setText(row_pos.getText_Rarity());

        convertView.setTag(holder);
    }
    else {
        holder = (ViewHolder) convertView.getTag();
    }
    return convertView;
}
有人能修好吗?谢谢

您的数据没有重复——当您循环使用旧视图时,您没有将其初始化为新值。将设置值的代码(而不是建立连接的代码)移到if-else语句之外

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item, null);
        holder = new ViewHolder();

        holder.Name = (TextView) convertView.findViewById(R.id.Recipe_Name);
        holder.Image_Block = (ImageView) convertView.findViewById(R.id.Recipe_Image);
        holder.Text_Recipe = (TextView) convertView.findViewById(R.id.Recipe_Text);
        holder.Text_Rarity = (TextView) convertView.findViewById(R.id.Recipe_Rarity);


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

    RowItem row_pos = rowItems.get(position);
    holder.Image_Block.setImageResource(row_pos.getImage_Block());
    holder.Name.setText(row_pos.getName());
    holder.Text_Recipe.setText(row_pos.getText_Recipe());
    holder.Text_Rarity.setText(row_pos.getText_Rarity());
    return convertView;
}
您的数据不会重复——当您循环使用旧视图时,您不会将其初始化为新值。将设置值的代码(而不是建立连接的代码)移到if-else语句之外

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item, null);
        holder = new ViewHolder();

        holder.Name = (TextView) convertView.findViewById(R.id.Recipe_Name);
        holder.Image_Block = (ImageView) convertView.findViewById(R.id.Recipe_Image);
        holder.Text_Recipe = (TextView) convertView.findViewById(R.id.Recipe_Text);
        holder.Text_Rarity = (TextView) convertView.findViewById(R.id.Recipe_Rarity);


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

    RowItem row_pos = rowItems.get(position);
    holder.Image_Block.setImageResource(row_pos.getImage_Block());
    holder.Name.setText(row_pos.getName());
    holder.Text_Recipe.setText(row_pos.getText_Recipe());
    holder.Text_Rarity.setText(row_pos.getText_Rarity());
    return convertView;
}

当然,您需要在创建或设置后将数据设置到holder。当然,您需要在创建或设置后将数据设置到holder。