Android 将Firestore数据检索到Recylerview不工作
当用户从第二个微调器中选择一个项目并在RedcyclerView内部的CardView中显示时,我基本上希望显示firestore中的数据。 代码不会抛出任何错误,但也不会显示数据,即从第二个微调器中选择项目时不会发生任何事情。 我的Firestore数据库架构类似于: 测试>第7级(标准/等级)>物理(科目)>问题编号>1>文档自动ID>qName、op1、op2、op3、op4、cop(字段) 这是QuestionListFragment.java,我想在这里显示数据Android 将Firestore数据检索到Recylerview不工作,android,android-recyclerview,google-cloud-firestore,android-cardview,android-viewholder,Android,Android Recyclerview,Google Cloud Firestore,Android Cardview,Android Viewholder,当用户从第二个微调器中选择一个项目并在RedcyclerView内部的CardView中显示时,我基本上希望显示firestore中的数据。 代码不会抛出任何错误,但也不会显示数据,即从第二个微调器中选择项目时不会发生任何事情。 我的Firestore数据库架构类似于: 测试>第7级(标准/等级)>物理(科目)>问题编号>1>文档自动ID>qName、op1、op2、op3、op4、cop(字段) 这是QuestionListFragment.java,我想在这里显示数据 public clas
public class QuestionListFragment extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
Spinner spin1,spin2;
String sub,std,TAG="QuestionListFragment";
private FirebaseFirestore db;
private CollectionReference ref;
private QuestionItemAdapter adapter;
RecyclerView recyclerView;
public QuestionListFragment() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment QuestionListFragment.
*/
// TODO: Rename and change types and number of parameters
public static QuestionListFragment newInstance(String param1, String param2) {
QuestionListFragment fragment = new QuestionListFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_question_list, container, false);
db=FirebaseFirestore.getInstance();
spin1=(Spinner)view.findViewById(R.id.list_standard_spinner);
ArrayAdapter<String> arrayAdapter1 = new ArrayAdapter<String>(getContext(), android.R.layout.simple_expandable_list_item_1, getResources().getStringArray(R.array.standard));
arrayAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin1.setAdapter(arrayAdapter1);
spin2= (Spinner) view.findViewById(R.id.list_subject_spinner);
ArrayAdapter<String> arrayAdapter2 = new ArrayAdapter<String>(getContext(), android.R.layout.simple_expandable_list_item_1,getResources().getStringArray(R.array.subjects));
arrayAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin2.setAdapter(arrayAdapter2);
spin2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
//sub=spin2.getSelectedItem().toString().trim();
setUpRecylerView();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
recyclerView= view.findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
return view;
}
public void setUpRecylerView(){
for (int i=1;i<=50;i++){
Log.d(TAG, "setUpRecylerView: In setuprecylerview");
std=spin1.getSelectedItem().toString().trim();
sub=spin2.getSelectedItem().toString().trim();
CollectionReference cref;
ref=db.collection("Tests").document(std).collection(sub).document("QuestionNum").collection(String.valueOf(i));
Query query = ref.orderBy("qName",Query.Direction.ASCENDING);
FirestoreRecyclerOptions<QuestionItem> options = new FirestoreRecyclerOptions.Builder<QuestionItem>()
.setQuery(query,QuestionItem.class)
.build();
adapter=new QuestionItemAdapter(options);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(adapter);
adapter.startListening();
}
}
}
这是adapater类QuestionItemAdapter.java
public class QuestionItemAdapter extends FirestoreRecyclerAdapter<QuestionItem,
QuestionItemAdapter.NoteHolder> {
/**
* Create a new RecyclerView adapter that listens to a Firestore Query. See {@link
* FirestoreRecyclerOptions} for configuration options.
*
* @param options
*/
public QuestionItemAdapter(@NonNull FirestoreRecyclerOptions<QuestionItem> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull QuestionItemAdapter.NoteHolder holder, int position,
@NonNull QuestionItem model) {
holder.qname_textview.setText(model.getqName());
holder.op1_textview.setText(model.getOp1());
holder.op2_textview.setText(model.getOp2());
holder.op3_textview.setText(model.getOp3());
holder.op4_textview.setText(model.getOp4());
holder.cop_textview.setText(model.getCop());
}
@NonNull
@Override
public QuestionItemAdapter.NoteHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.question_item,parent,false);
return new NoteHolder(v);
}
class NoteHolder extends RecyclerView.ViewHolder{
TextView qname_textview,op1_textview,op2_textview,op3_textview,op4_textview,cop_textview;
public NoteHolder(@NonNull View itemView) {
super(itemView);
qname_textview=itemView.findViewById(R.id.qName_display);
op1_textview=itemView.findViewById(R.id.op1_display);
op2_textview=itemView.findViewById(R.id.op2_display);
op3_textview=itemView.findViewById(R.id.op3_display);
op4_textview=itemView.findViewById(R.id.op4_display);
cop_textview=itemView.findViewById(R.id.correct_op_display);
}
}
}
公共类QuestionItemAdapter扩展FirestoreRecyclerAdapter{
/**
*创建一个新的RecyclerView适配器,用于侦听Firestore查询。请参阅{@link
*FirestoreRecyclerOptions}用于配置选项。
*
*@param选项
*/
public QuestionItemAdapter(@NonNull FirestoreRecyclerOptions选项){
超级(期权);
}
@凌驾
受保护的无效onBindViewHolder(@NonNull QuestionItemAdapter.NoteHolder holder,int位置,
@非空(项目模型){
holder.qname_textview.setText(model.getqName());
holder.op1_textview.setText(model.getOp1());
holder.op2_textview.setText(model.getOp2());
holder.op3_textview.setText(model.getOp3());
holder.op4_textview.setText(model.getOp4());
holder.cop_textview.setText(model.getCop());
}
@非空
@凌驾
public QuestionItemAdapter.NoteHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.question_项,parent,false);
返还新票据持有人(v);
}
类NoteHolder扩展了RecyclerView.ViewHolder{
TextView qname_TextView、op1_TextView、op2_TextView、op3_TextView、op4_TextView、cop_TextView;
公共票据持有人(@NonNull View itemView){
超级(项目视图);
qname\u textview=itemView.findViewById(R.id.qname\u显示);
op1_textview=itemView.findviewbyd(R.id.op1_显示);
op2_textview=itemView.findviewbyd(R.id.op2_显示);
op3_textview=itemView.findviewbyd(R.id.op3_显示);
op4_textview=itemView.findviewbyd(R.id.op4_显示);
cop_textview=itemView.findViewById(R.id.correct_op_display);
}
}
}
如果你遇到问题,最好在发布问题时创建一个链接。您为此问题发布了近350行代码。对于人们来说,在线解析和调试是非常困难的。请编辑您的问题并隔离问题,这样可以增加您获得帮助的机会。删除那些布局XML文件。谢谢你的建议。
public class QuestionItemAdapter extends FirestoreRecyclerAdapter<QuestionItem,
QuestionItemAdapter.NoteHolder> {
/**
* Create a new RecyclerView adapter that listens to a Firestore Query. See {@link
* FirestoreRecyclerOptions} for configuration options.
*
* @param options
*/
public QuestionItemAdapter(@NonNull FirestoreRecyclerOptions<QuestionItem> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull QuestionItemAdapter.NoteHolder holder, int position,
@NonNull QuestionItem model) {
holder.qname_textview.setText(model.getqName());
holder.op1_textview.setText(model.getOp1());
holder.op2_textview.setText(model.getOp2());
holder.op3_textview.setText(model.getOp3());
holder.op4_textview.setText(model.getOp4());
holder.cop_textview.setText(model.getCop());
}
@NonNull
@Override
public QuestionItemAdapter.NoteHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.question_item,parent,false);
return new NoteHolder(v);
}
class NoteHolder extends RecyclerView.ViewHolder{
TextView qname_textview,op1_textview,op2_textview,op3_textview,op4_textview,cop_textview;
public NoteHolder(@NonNull View itemView) {
super(itemView);
qname_textview=itemView.findViewById(R.id.qName_display);
op1_textview=itemView.findViewById(R.id.op1_display);
op2_textview=itemView.findViewById(R.id.op2_display);
op3_textview=itemView.findViewById(R.id.op3_display);
op4_textview=itemView.findViewById(R.id.op4_display);
cop_textview=itemView.findViewById(R.id.correct_op_display);
}
}
}