2017-10-11 3 views
1

Je veux montrer une donnée dans l'application mi, mais un ne peut pas afficher pour cette erreur:adaptateur personnalisé à a cette erreur RecyclerView Aucun adaptateur attaché; sauter la disposition

RecyclerView Aucun adaptateur joint; sauts mise en page

c'est ma MainActivity, où je dislay mes informations, je pense est un problème avec mon Custom Adapter "CurpAdapter" et pour cette raison, l'application ne montre rien de mes informations, l'information est enregistrée dans le projet firebase et je ne peux pas afficher dans la console.

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); 
} 

}

et ce Sí ma commande adapater classe 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); 
    } 
} 

}

Répondre

0

Vous devez créer un adaptateur avant database.addChildEventListener. Cela signifie que ces deux lignes ci-dessous devraient être déplacés d'addChildEventListener et appelé avant qu'il:

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

Cela va créer un adaptateur qui contient une liste de données vide au début de la méthode onCreate.

Ensuite, vous devez ajouter la méthode setData dans votre CurpAdapter. Il ressemblera à ceci:

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

maintenant dans onChildAdded après lista.add(value); vous devez appeler

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