Проблемы с RecycleView android

386
09 марта 2017, 22:01

Добрый день. Возникла проблема с RecycleView, а именно: Как-то странно забиваются данные в список, если список данных очень большой, то создаются элементы с одинаковыми данными. Как-то так:

Файл /acct, /efs, /config и др повторился дважды и более.

Я подозреваю, что ошибка где-то тут, но никак не могу ее искоренить

 public static class ViewHolder extends RecyclerView.ViewHolder {
    // each data item is just a string in this case
    public static TextView fileName;
    public static TextView fileType;
    public static ImageView icon;
    ViewHolder(View itemView ) {
        super(itemView);
       fileName=(TextView)itemView.findViewById(R.id.file_name);
        fileType=(TextView)itemView.findViewById(R.id.file_type);
        icon=(ImageView) itemView.findViewById(R.id.icon);
    }

}
public FileManagerAdapter(LinkedList<FileData> fileData) {
    this.fileData=fileData;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.file_manager_field, parent, false);
    ViewHolder VH = new ViewHolder(v);
    return VH;
}
@Override
public void onBindViewHolder(FileManagerAdapter.ViewHolder holder, final int position) {
    ViewHolder.fileName.setText(fileData.get(position).fileName);
    ViewHolder.fileType.setText(fileData.get(position).fileType);
    ViewHolder.icon.setImageResource(fileData.get(position).photoId);
    Log.e("pos", String.valueOf(position)+"      "+fileData.get(position).fileName);
    holder.itemView.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            Log.e("clicl position", String.valueOf(position)+"       "+ fileData.size());
           MainActivity.dir=fileData.get(position).fileName;
            MainActivity.br.sendEmptyMessage(0);
        }
    });
}

@Override
public int getItemCount() {
    return fileData.size();
}
Answer 1
  1. Сделайте поля НЕ статичными

вместо public static TextView fileName; нужно public TextView fileName;

вместо public static TextView fileType; нужно public TextView fileType;

вместо public static ImageView icon; нужно public ImageView icon;

  1. Поменяйте ViewHolder на holder

вместо ViewHolder.fileName.setText(fileData.get(position).fileName); нужно holder.fileName.setText(fileData.get(position).fileName);

вместо ViewHolder.fileType.setText(fileData.get(position).fileType); нужно holder.fileType.setText(fileData.get(position).fileType);

вместо ViewHolder.icon.setImageResource(fileData.get(position).photoId); нужно holder.icon.setImageResource(fileData.get(position).photoId);

READ ALSO
Медленно работает перемножение матриц java

Медленно работает перемножение матриц java

Добрый деньНаписал код, вычисляющий остаток от деления n-ного числа Фибоначчи на вводимое из консоли число, где n может быть очень большим...

382
Непонятная часть кода

Непонятная часть кода

Увидел задачу, суть которой была переопределить методы equals и hashcode чтобы сравнение объектов работало правильноТак вот, что значит эта строка?

251
зачем нужен state в AbstractQueuedSynchronizer

зачем нужен state в AbstractQueuedSynchronizer

AbstractQueuedSynchronizer содержит внутреннее поле state0 и 1 зарезервированы для состояния - блокировки нет, и блокировка установлена

270
Как создать OSGi bundle для gradle в IntelliJ IDEA

Как создать OSGi bundle для gradle в IntelliJ IDEA

Пытаюсь создать новый модуль для готового проекта через File>New>Module и он даже позволяет что-то создатьНо никаких src\main

340