通过适配器输入时的数据 "missing"
Data "missing" when put through adapter
我正在制作一个应用程序,但我的 RecyclerView 卡在了适配器上。在我的主要 activity (ShowActivity) 中,我从 firebase 获取数据并将其转发到 RecyclerViewAdapter 以某种方式 "loses" 数据。我将数据作为 class 提交的 object 获取(其中包含标题、文本、作者和其他一些字符串),如果我在 activity 中打印出 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);
}
}
}
这是投稿class:
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;
}
}
你不应该写这段代码:
this.submissionList = new List<Submission>() { ...
这段代码创建了一个新的提交列表,它是空的。
只需创建一个构造函数并在您的适配器中初始化您的提交列表:
Public RecyclerViewAdapter(ArrayList<Submission> submissionList)
{
this.submissionList = submissionList;
}
然后你就可以使用你的提交列表了。
我正在制作一个应用程序,但我的 RecyclerView 卡在了适配器上。在我的主要 activity (ShowActivity) 中,我从 firebase 获取数据并将其转发到 RecyclerViewAdapter 以某种方式 "loses" 数据。我将数据作为 class 提交的 object 获取(其中包含标题、文本、作者和其他一些字符串),如果我在 activity 中打印出 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);
}
}
}
这是投稿class:
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;
}
}
你不应该写这段代码:
this.submissionList = new List<Submission>() { ...
这段代码创建了一个新的提交列表,它是空的。 只需创建一个构造函数并在您的适配器中初始化您的提交列表:
Public RecyclerViewAdapter(ArrayList<Submission> submissionList)
{
this.submissionList = submissionList;
}
然后你就可以使用你的提交列表了。