【问题标题】:RecyclerAdapter override methods(OnBindViewHolder and onCreateViewHolder) not called in RecyclerView [closed]RecyclerView 中未调用 RecyclerAdapter 覆盖方法(OnBindViewHolder 和 onCreateViewHolder)[关闭]
【发布时间】:2020-12-21 12:56:06
【问题描述】:

我正在尝试调试我的代码,但我的回收站视图没有显示任何内容。我正在尝试将 2 个回收器视图与 2 个不同的适配器一起使用,因此下面的适配器代码不起作用。我试过在上面应用日志,发现没有调用 onBindViewHolder 和 onCreateViewHolder。这对我来说已经有一段时间了。下面是我的适配器代码。

onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new RecordsAdapter.MyNewAdapterHolder(LayoutInflater.from(context).inflate(R.layout.records_layout,parent,false));
    }
    @Override
    public void onBindViewHolder(@NonNull RecordsAdapter.MyNewAdapterHolder holder, int position) {
        String str = PreferenceManager.getDefaultSharedPreferences(context).getString("Name", "get");
        Toast.makeText(context, "str", Toast.LENGTH_SHORT).show();
        FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance("https://milkdiary-farmer.firebaseio.com/");
        DatabaseReference databaseReference = firebaseDatabase.getReference("Users").child("Users").child("Your Records");
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot childSnap : dataSnapshot.getChildren()){
                    String value = childSnap.getValue().toString();
                    Toast.makeText(context, "value", Toast.LENGTH_SHORT).show();
                    holder.farmername.setText(value);
                    holder.farmerRecord.setText(value);
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
        //holder.setDetails(this.recordsArrayList1.get(position));
    }
    @Override
    public int getItemCount() {
        return recordsArrayList1.size();
    }

以下是我的主要活动代码

protected void onCreate(Bundle paramBundle) {
    super.onCreate(paramBundle);
    setContentView(R.layout.activity_main2);
    Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar3);
    setSupportActionBar(toolbar);
    toolbar.setTitle("Records");
    toolbar.setTitleTextColor(-1);
    getIntent().getStringExtra("username");
    RecyclerView recyclerView1 = (RecyclerView)findViewById(R.id.recycler);

    RecyclerView recyclerView2 = findViewById(R.id.records_recyclerview);
    recordsArrayList = new ArrayList<>();
    RecordsAdapter recordsAdapter = new RecordsAdapter(this,recordsArrayList);
    recyclerView2.addItemDecoration(new DividerItemDecoration(this,1));
    recyclerView2.setAdapter(recordsAdapter);
    recyclerView2.setLayoutManager(new LinearLayoutManager(this));
    recordsAdapter.notifyDataSetChanged();
    this.recyclerView = recyclerView1;
    recyclerView1.setLayoutManager(new LinearLayoutManager(this));
    this.arrayList = new ArrayList();
    this.adapter = new MyAdapter(this, this.arrayList);
    this.recyclerView.addItemDecoration(new DividerItemDecoration(this, 1));
    this.recyclerView.setAdapter(this.adapter);

    fetch();
}

【问题讨论】:

  • 尝试在 this.recyclerView.setAdapter(this.adapter) 之后在适配器上调用 notifyDataSetChanged;
  • 我试过了还是不行
  • 如果你能提供demo项目我们可以帮助调试。
  • 这是什么意思?
  • 请编辑您的问题以在您添加多人指向的notifyDataSetChanged 的调用后显示更新的代码。还要注意onCancelled的最小实现是:public void onCancelled(@NonNull DatabaseError databaseError) { throw databaseError.toException(); }

标签: android firebase-realtime-database android-recyclerview


【解决方案1】:

当您获取数据并填充您的数组列表时,您是否在适配器上调用了notifyDatasetChanged

【讨论】:

  • 我试过了还是不行
  • 显示您的 fetch 方法,何时以及如何填充数组列表?
  • fetch 方法包含一个不同的适配器,对我来说效果很好。名称为“RecordsAdapter”的适配器对我来说效果不佳,因为没有显示数据
  • 当您在其他方法中填写“recordsArrayList”时,您无法访问此适配器,在 Activity 中声明“RecordsAdapter”,如“适配器”,当您填写“recordsArrayList”时只需调用“recordsAdapter. notifyDatasetChanged()"
猜你喜欢
  • 2021-08-07
  • 2023-03-21
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
相关资源
最近更新 更多