java - 自定义适配器出现此错误 RecyclerView 未连接适配器;跳过布局

标签 java android android-recyclerview

我想在小米应用程序中显示数据,但无法显示此错误:

RecyclerView 未连接适配器;跳过布局

这是我的 MainActivity,我在其中显示我的信息,我认为这是我的自定义适配器“CurpAdapter”的问题,因此,该应用程序不显示我的任何信息,该信息保存在 firebase 项目中,并且无法在控制台中显示。

public class MainActivity extends AppCompatActivity {

DatabaseReference database;
private List<Curp> curps;
private RecyclerView reciclador;
RecyclerView.Adapter adap;
private CurpAdapter cupadapter;
List<Curp> lista=new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    FirebaseApp.initializeApp(this);

    database = FirebaseDatabase.getInstance().getReference();
    reciclador=(RecyclerView)findViewById(R.id.reciclador);
    LinearLayoutManager lim=new LinearLayoutManager(this);
    lim.setOrientation(LinearLayoutManager.VERTICAL);
    reciclador.setLayoutManager(lim);

    database.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            Curp value=new Curp();
            value=(Curp) dataSnapshot.getValue(Curp.class);

            lista.add(value);
            cupadapter=new CurpAdapter(lista);
            adap = new CurpAdapter(lista);
            reciclador.setAdapter(adap);
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {}
        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {}
        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {}
        @Override
        public void onCancelled(DatabaseError databaseError) { }
    });

}
@Override
protected void onStart(){
    super.onStart();
    DatabaseReference conditionRef= database.child("root");
}

public void lanzar(View view){
    Intent generar = new Intent(this, Generar.class);
    startActivity(generar);
}

}

这是我的自定义适配器 CurpAdapter 类

public class CurpAdapter extends RecyclerView.Adapter<CurpAdapter.curpHolder> {

private List<Curp> curps;

public CurpAdapter(List<Curp> curps) {
    this.curps = curps;
}

@Override
public curpHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false);
    return new curpHolder(v);
}

@Override
public void onBindViewHolder(curpHolder holder, int position) {
    Curp curpc=curps.get(position);
    holder.curpCpompleto.setText(curpc.curpGen);
    holder.iniciales.setText(curpc.curpGen.substring(0,3));
    holder.imagen.setImageLevel(0);
}

@Override
public int getItemCount() {
    return 0;
}

public class curpHolder extends RecyclerView.ViewHolder{

    ImageView imagen;
    TextView iniciales, curpCpompleto;

    public curpHolder(View itemView) {
        super(itemView);
        iniciales=(TextView)itemView.findViewById(R.id.iniciales);
        curpCpompleto=(TextView)itemView.findViewById(R.id.curpCompleta);
        imagen=(ImageView)itemView.findViewById(R.id.imagen);
    }
}

}

最佳答案

您必须在database.addChildEventListener之前创建适配器。这意味着下面这两行应该从 addChildEventListener 移出并在其之前调用:

adap = new CurpAdapter(lista);
reciclador.setAdapter(adap);

这将在 onCreate 方法的开头创建包含空数据列表的适配器。

接下来,您必须在 CurpAdapter 中添加 setData 方法。它看起来像这样:

public void setData(List<Curp> curps){
    this.curps = curps.
}

现在,在 lista.add(value); 之后的 onChildAdded 中,您必须调用

adap.setData(list);
adap.notifyDataSetChange()

关于java - 自定义适配器出现此错误 RecyclerView 未连接适配器;跳过布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46694951/

相关文章:

java - java中文件的状态

android - org.openqa.selenium.WebDriverException : Cannot create temp directory:/sd card/1339054625829.

android - 为什么使用 ImageLoader 显示的肖像图像会旋转?

android - android canvas 中位图的同步旋转、平移和缩放

java - 回收站适配器 onClick 项目出现问题

android - Glide 实际上是如何工作的?

java - 更改为横向模式应用程序无法正常工作

java - 锁定可变对象 - 为什么它被认为是一种不好的做法?

java - 如何为二维数组赋值?

android - 清除整个适配器并添加新元素时的 RecyclerView 动画