RecyclerView error: No layout manager attached

I couldn't find the error.

My activity:

private AdapterPacientes adapterPacientes;
private static MVP.Presenter presenter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lista_pacientes);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    if (presenter == null)
        presenter = new Presenter();
    presenter.setActivity(this);
    presenter.retrivePacientes( savedInstanceState );
}

@Override
protected void onStart() {
    super.onStart();

    RecyclerView lista = (RecyclerView) findViewById(R.id.list);
    lista.setHasFixedSize(true);

    adapterPacientes = new AdapterPacientes(presenter.getPacientes());
    lista.setAdapter(adapterPacientes);
}

@Override
public void onSaveInstanceState(Bundle outState) {
    outState.putParcelableArrayList(KEY_PACIENTE, presenter.getPacientes());
    super.onSaveInstanceState(outState);
}

@Override
public void refreshAdapter() {
    adapterPacientes.notifyDataSetChanged();
}

// ...

Error that appears in Log

log error

I spent more than two hours searching but couldn't find why... The code structure is in the MVP standard.

Data is being brought in and arraylist is being populated correctly.

I appreciate it now.

Author: ramaral, 2017-02-09

2 answers

The error is clarifying: no Associated LayoutManager.

One of the differences between RecyclerView and ListView is that RecyclerView is agnostic regarding how the items are arranged visually.
This responsibility is performed by The Associated LayoutManager ela.

So what's missing is to associate one with RecyclerView. The Android API provides several LayoutManager and you can create your own.

@Override
protected void onStart() {
    super.onStart();

    RecyclerView lista = (RecyclerView) findViewById(R.id.list);
    lista.setHasFixedSize(true);

    //Atribuir LayoutManager
    lista.setLayoutManager(new LinearLayoutManager(this));

    adapterPacientes = new AdapterPacientes(presenter.getPacientes());
    lista.setAdapter(adapterPacientes);
}
 5
Author: ramaral, 2017-04-13 12:59:39

Hello, in my case I did the LayoutManager Association, but it keeps giving the error!!

Method for listing firebase data

public void listarContatos(){
        //Listagem de Contatos
        contatosRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                Contato contatos = dataSnapshot.getValue(Contato.class);
                listaContatos.add(contatos);

                Adapter adaptador = new Adapter(listaContatos);

                RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
                listViewContatos.setLayoutManager(layoutManager);
                listViewContatos.setHasFixedSize(true);
                listViewContatos.setAdapter(adaptador);
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {


            }
        });
}insira o código aqui

Adapter Class

public class Adapter extends RecyclerView.Adapter<Adapter.MyViewHolder>{

private List <Contato> listaContatos;

public Adapter(List<Contato> lista) {
    this.listaContatos = lista;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View itemLista = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_contatos, parent, false);

    return new MyViewHolder(itemLista);
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    Contato contatos = listaContatos.get(position);

    holder.nome.setText(contatos.getNome());
    holder.telefone.setText(contatos.getTelefone());
    holder.celular.setText(contatos.getCelular());
    holder.email.setText(contatos.getEmail());
    holder.status.setImageResource(contatos.getImageStatus());
}

@Override
public int getItemCount() {

    return this.listaContatos.size();
}

//MINHA VIEW HOLDER ****************************************************************************
public class MyViewHolder extends RecyclerView.ViewHolder{
    TextView nome;
    TextView telefone;
    TextView celular;
    TextView email;
    ImageView status;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);

        nome = itemView.findViewById(R.id.textNome);
        telefone = itemView.findViewById(R.id.textTelefone);
        celular = itemView.findViewById(R.id.textTelefone);
        email = itemView.findViewById(R.id.textEmail);
        status = itemView.findViewById(R.id.imageStatus);
    }
}

}

Model Class

Public class contact {

private String nome, celular, telefone, email;
private int imageStatus;

private Contato contato;




public Contato() {


}

public Contato(String nome, String celular, String telefone, String email) {
    this.nome = nome;
    this.celular = celular;
    this.telefone = telefone;
    this.email = email;
}

public Contato(Contato contato) {
    this.contato = contato;
}

public void salvar(){

    FirebaseAuth autenticacao = ConfigFirebase.getFirebaseAutenticacao();
    String idUsuario = autenticacao.getCurrentUser().getUid().toString();

    DatabaseReference firebase = ConfigFirebase.getFirebase();
    firebase.child("contatos")
            .child(idUsuario)
            .push()
            .setValue(this);

}


public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getCelular() {
    return celular;
}

public void setCelular(String celular) {
    this.celular = celular;
}

public String getTelefone() {
    return telefone;
}

public void setTelefone(String telefone) {
    this.telefone = telefone;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

@Exclude
public int getImageStatus() {
    return imageStatus;
}

public void setImageStatus(int imageStatus) {
    this.imageStatus = imageStatus;
}

}

 0
Author: Yure Santana, 2019-08-13 16:42:31