Липсват данни при преминаване през адаптер

Правя приложение и останах с адаптер за моя RecyclerView. В основната си дейност (ShowActivity) получавам данни от firebase и ги препращам към RecyclerViewAdapter, който по някакъв начин „губи“ данни. Получавам данни като обект на клас Submission (който има заглавие, текст, автор и няколко други низа) и ако отпечатам submission.title в дейността, работи добре. Въпреки това, когато се опитам да направя адаптер за recyclerView (изпращам списък с изпращания), всички те стават нулеви. Адаптерът преминава и се създават изгледи, но те използват стойности по подразбиране вместо тези, които са събрани от базата данни. Не мога да обясня този тип поведение и се надявам някой да види проблем, който съм пропуснал.

Създавам адаптер тук:

@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s
        Submission submission = dataSnapshot.getValue(Submission.class);
        if (submission.title != null) {
            submissionList.add(submission);
            adapter = new RecyclerViewAdapter(submissionList);
            if (recyclerView.getAdapter() != null) {
                recyclerView.swapAdapter(adapter, true);
            } else {
                recyclerView.setAdapter(adapter);
            }
        }
}

Това е адаптер:

package com.example.lenovo.colabwriter;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class RecyclerViewAdapter extends 
RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {

private List<Submission> submissionList;

public RecyclerViewAdapter (final List<Submission> submissionList) {
    this.submissionList = new List<Submission>() {
        @Override
        public int size() {
            return submissionList.size();
        }

        @Override
        public boolean isEmpty() {
            return false;
        }

        @Override
        public boolean contains(Object o) {
            return false;
        }

        @NonNull
        @Override
        public Iterator<Submission> iterator() {
            return null;
        }

        @NonNull
        @Override
        public Object[] toArray() {
            return new Object[0];
        }

        @NonNull
        @Override
        public <T> T[] toArray(@NonNull T[] ts) {
            return null;
        }

        @Override
        public boolean add(Submission submission) {
            return false;
        }

        @Override
        public boolean remove(Object o) {
            return false;
        }

        @Override
        public boolean containsAll(@NonNull Collection<?> collection) {
            return false;
        }

        @Override
        public boolean addAll(@NonNull Collection<? extends Submission> collection) {
            return false;
        }

        @Override
        public boolean addAll(int i, @NonNull Collection<? extends Submission> collection) {
            return false;
        }

        @Override
        public boolean removeAll(@NonNull Collection<?> collection) {
            return false;
        }

        @Override
        public boolean retainAll(@NonNull Collection<?> collection) {
            return false;
        }

        @Override
        public void clear() {

        }

        @Override
        public Submission get(int i) {
            return null;
        }

        @Override
        public Submission set(int i, Submission submission) {
            return null;
        }

        @Override
        public void add(int i, Submission submission) {

        }

        @Override
        public Submission remove(int i) {
            return null;
        }

        @Override
        public int indexOf(Object o) {
            return 0;
        }

        @Override
        public int lastIndexOf(Object o) {
            return 0;
        }

        @NonNull
        @Override
        public ListIterator<Submission> listIterator() {
            return null;
        }

        @NonNull
        @Override
        public ListIterator<Submission> listIterator(int i) {
            return null;
        }

        @NonNull
        @Override
        public List<Submission> subList(int i, int i1) {
            return null;
        }
    };
    this.submissionList = submissionList;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Submission currentSubmission = submissionList.get(position);
    Log.i("submissionCheck", String.valueOf(currentSubmission));
    if (currentSubmission != null) {
        holder.title.setText(currentSubmission.title);
        holder.text.setText(currentSubmission.text);
        holder.author.setText(currentSubmission.author);
    }
}

@Override
public int getItemCount() {
    return submissionList.size();
}

public static class ViewHolder extends RecyclerView.ViewHolder {
    TextView title, text, author;
    public ViewHolder (View view) {
        super (view);
        title = view.findViewById(R.id.title);
        text = view.findViewById(R.id.text);
        author = view.findViewById(R.id.author);
    }
}
}

Това е класът за подаване:

package com.example.lenovo.colabwriter;

public class Submission {
    public String title, text, author, time, length;

    public Submission () {
    }

    public Submission (String title, String text, String author, String time, String length) {
        this.title = title;
        this.text = text;
        this.author = author;
        this.time = time;
        this.length = length;
    }
}

person Ian Smith    schedule 27.01.2018    source източник


Отговори (1)


Не трябва да пишете този код:

this.submissionList = new List<Submission>() { ...

този код прави нов списък за подаване и той е нула. просто създайте конструктор и инициирайте вашия submissionList във вашия адаптер:

Public RecyclerViewAdapter(ArrayList<Submission> submissionList)
{
  this.submissionList = submissionList;
}

и след това можете да използвате вашия списък за изпращане.

person Reza.Abedini    schedule 27.01.2018
comment
Нещото, което посочихте, може да е причинило някакъв проблем, но трябваше да превключа към ArrayList вместо List. Това реши всичките ми проблеми (: Благодаря за помощта - person Ian Smith; 27.01.2018
comment
Добре дошли, трябва да гласувате, ако този отговор ви помага, благодаря :) - person Reza.Abedini; 28.01.2018
comment
Направих, но нямам достатъчно репутация, така че не се показва /: - person Ian Smith; 28.01.2018