【问题标题】:RecyclerView: No adapter attached; skipping layout CardView [duplicate]RecyclerView:没有附加适配器;跳过布局 CardView [重复]
【发布时间】:2019-04-11 04:45:16
【问题描述】:

我正在尝试使用来自FireBase 的信息来扩充CardView。我的问题是对数据库的引用读取了它,但 RecyclerView 错过了它......我是 Android 新手,我会非常感谢你的帮助。

这是我的 Java 类:

public class ResumenActivity extends AppCompatActivity {

DatabaseReference refMV;
RecyclerView recyclerViewResumen;
ArrayList<Listado> listaResumen;
AdaptadorResumen adaptadorResumen;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_resumen);

    recyclerViewResumen = (RecyclerView) findViewById(R.id.listadoRecyclerView);
    recyclerViewResumen.setLayoutManager(new LinearLayoutManager(this));

    refMV.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            listaResumen = new ArrayList<Listado>();

            Listado l = dataSnapshot.getValue(Listado.class);
            listaResumen.add(l);

            adaptadorResumen = new AdaptadorResumen(ResumenActivity.this, listaResumen);
            recyclerViewResumen.setAdapter(adaptadorResumen);
            recyclerViewResumen.setHasFixedSize(true);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(ResumenActivity.this, "Upss.. Algo anda mal!", Toast.LENGTH_SHORT).show();
        }
    });
    }
}

这是模型:

package app.technologias8.smartbarprototipo.modelos;

public class Listado {

private String Nombre;
private String Precio;

public Listado() {
}

public Listado(String nombre, String precio) {
    this.Nombre = nombre;
    this.Precio = precio;
}

public String getNombre() {
    return this.Nombre;
}

public void setNombre(String nombre) {
    this.Nombre = nombre;
}

public String getPrecio() {
    return this.Precio;
}

public void setPrecio(String precio) {
    this.Precio = precio;
}
}

Firebase:

Firebase Database

【问题讨论】:

    标签: android firebase android-recyclerview android-cardview


    【解决方案1】:

    您只需要像这样将布局管理器添加到您的Recycleview

    refMV.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    
                listaResumen = new ArrayList<Listado>();
    
                Listado l = dataSnapshot.getValue(Listado.class);
                listaResumen.add(l);
    
                adaptadorResumen = new AdaptadorResumen(ResumenActivity.this, listaResumen);
                recyclerViewResumen.setLayoutManager(ResumenActivity.this);//ADD THIS
                recyclerViewResumen.setAdapter(adaptadorResumen);
                recyclerViewResumen.setHasFixedSize(true);
            }
    

    【讨论】:

      【解决方案2】:

      RecyclerView 需要一个适配器,即使是一个空的,才能正确执行其布局。由于您的数据库调用是异步发生的,它在onDataChange 中创建的AdaptadorResumen 没有及时准备好让android 进行初始布局,所以整个事情都被忽略了。

      尝试在onCreate 中设置一个空适配器。当您的数据库调用完成时,它将被替换。

      recyclerViewResumen = (RecyclerView) findViewById(R.id.listadoRecyclerView);
      recyclerViewResumen.setLayoutManager(new LinearLayoutManager(this));
      adaptadorResumen = new AdaptadorResumen(ResumenActivity.this, null);
      recyclerViewResumen.setAdapter(adaptadorResumen);
      

      【讨论】:

        猜你喜欢
        • 2015-09-01
        • 2015-10-24
        • 1970-01-01
        • 1970-01-01
        • 2018-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-02
        相关资源
        最近更新 更多