Повторять элементы в ListView?не работает нормально первый элемент отображается на 3-й позиции и снова повторяется с 1-го элемента снова - PullRequest
0 голосов
/ 19 октября 2018

Все работало нормально, но теперь я не понимаю, что происходит, у меня есть 72 элемента для отображения в listView, он не работает нормально, первый элемент отображается на 3-й позиции и другой элемент, который повторяется снова с 1-го элементаснова ??

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

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Ваша логика метода getView - ошибка, появление элемента повторения было вызвано повторным использованием представления, измените метод getView, например, следуйте фрагменту кода.

@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;
 }
0 голосов
/ 19 октября 2018

Как вы говорите

, он не работает нормально, первый элемент отображается на 3-й позиции, а другой элемент, который повторяется снова с 1-го элемента снова

, вам нуженсвязывать данные без каких-либо условий для каждого элемента, как вы только связываете данные, когда converconvertView == null

, поэтому просто удалите это условие

if(convertView==null)

и всегда связывайте данные безлюбое состояние

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...