android - 回收站视图未显示
问题描述
所以我正在查询一个firebase数据库,并试图将数据读入recyclerview。现在,当我简单地将数据读入文本视图并将文本设置为数据时(即我有 3 个文本视图 - 颜色、高度、名称),这一切正常,并且显示了正确的数据。
但是,我一直在尝试将查询结果加载到回收器视图 rvResults 中,但它不起作用。我将数据添加到数组列表中,然后将包含查询结果的数组列表(颜色、高度、名称)传递到我的 ResultsRecyclerAdapater 中。但是,当我运行时,我得到一个空白屏幕 - 但没有崩溃。
我不是专家,但这块似乎是问题所在。它似乎没有将这些添加到 arrayLists 中。我的“植物”课程很好,所以这不是问题。
String name = plant.getName();
String bio = plant.getBio();
String height = plant.getHeight();
String colour = plant.getColour();
names.add(name);
heights.add(height);
colours.add(colour);
任何帮助将不胜感激!
ArrayList<String> names = new ArrayList<>();
ArrayList<String> heights = new ArrayList<>();
ArrayList<String> colours = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_activity);
Task task1 = plantRef.whereEqualTo("height", "Medium")
.get();
Task task2 = plantRef.whereEqualTo("colour", "Red")
.get();
Task<List<QuerySnapshot>> allTasks = Tasks.whenAllSuccess(task1, task2);
allTasks.addOnSuccessListener(new OnSuccessListener<List<QuerySnapshot>>() {
@Override
public void onSuccess(List<QuerySnapshot> querySnapshots) {
String data = "";
for(QuerySnapshot queryDocumentSnapshots : querySnapshots){
for (QueryDocumentSnapshot documentSnapshot:queryDocumentSnapshots){
Plant plant = documentSnapshot.toObject(Plant.class);
plant.setDocumentID(documentSnapshot.getId());
String documentId = plant.getDocumentID();
String name = plant.getName();
String bio = plant.getBio();
String height = plant.getHeight();
String colour = plant.getColour();
names.add(name);
heights.add(height);
colours.add(colour);
}
}
}
});
//set up the RecyclerView, setting the Layout to Horizontal, and binding the adapter
RecyclerView recyclerView = findViewById(R.id.rvResults);
recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
resultsAdapter = new ResultsRecyclerAdapter(this, names, heights, colours);
resultsAdapter.setClickListener(this);
recyclerView.setAdapter(resultsAdapter);
}
这是我的 ResultsRecyclerAdapter 类:
public class ResultsRecyclerAdapter extends RecyclerView.Adapter<ResultsRecyclerAdapter.ViewHolder> {
private List<String> mData;
private List<String> mHeights;
private List<String> mColours;
private LayoutInflater mInflater;
private ItemClickListener mClickListener;
public ResultsRecyclerAdapter(Context c, List<String> mData, List<String> mHeights, List <String> mColours) {
this.mInflater = LayoutInflater.from(c);
this.mData = mData;
this.mHeights = mHeights;
this.mColours = mColours;
}
// inflates the row layout from xml when needed
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.recycler_view_second_activity, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
String name = mData.get(position);
String height = mHeights.get(position);
String colour = mColours.get(position);
holder.tvName.setText(name);
holder.tvColour.setText(height);
holder.tvHeight.setText(colour);
}
@Override
public int getItemCount() {
return mData.size();
}
// stores and recycles views as they are scrolled off screen
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView tvName;
TextView tvHeight;
TextView tvColour;
ViewHolder(View itemView) {
super(itemView);
tvName = itemView.findViewById(R.id.tvName);
tvHeight = itemView.findViewById(R.id.tvHeight);
tvColour = itemView.findViewById(R.id.tvColour);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
}
}
// convenience method for getting data at click position
String getItem(int id) {
return mData.get(id);
}
// allows clicks events to be caught
void setClickListener(ResultsRecyclerAdapter.ItemClickListener itemClickListener) {
this.mClickListener = itemClickListener;
}
// parent activity will implement this method to respond to click events
public interface ItemClickListener {
void onItemClick(View view, int position);
}
}
解决方案
ResultsRecyclerAdapter
你在你的数据准备好之前调用你的OnSuccessListener
尝试在你onSuccess
完成后更新你的适配器
推荐阅读
- r - How do I conduct a One-Sample Chi-Squared Test On Population Variance in R?
- processing - 在处理中填充对象数组 - 所有对象都相同
- javascript - 仅当左列大于视口时,如何防止左列滚动?
- node.js - MongoDB $orderby 和 $sort 都不起作用
- sql - 更新最新数据
- javascript - Vue 事件监听器中的 if - else 语句
- python - 如何从python中的字符串中提取包含逗号的数字
- django - 从 Django 间隔中提取小时和秒
- reactjs - 导航栏中的搜索栏使用 react-bulma-components 不呈现
- python - 通过高级索引/矢量化更新矩阵