【问题标题】:Repeating items in ListView? its don't working fine first item display at 3rd position and repeats again from the 1st item again在 ListView 中重复项目?它不能正常工作,第一个项目显示在第三个位置,并再次从第一个项目重复
【发布时间】: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 逻辑,按照我在答案中发布的操作。

标签: android listview adapter custom-adapter


【解决方案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;
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2011-10-02
      • 1970-01-01
      • 2021-10-02
      • 2019-06-22
      相关资源
      最近更新 更多