4
respostas

ListView ou RecyclerView usando SlidingTabs

Estou tentando usar minha lista de alunos dentro de um layout de abas, porem estou tendo problemas com o Scroll. Então andei buscando em alguns fóruns e fui orientado a estar usando o RecyclerView. Contudo, ainda não consegui ser bem sucedido em minha implementacão.

Poderiam me ajudar de forma simples como posso estar usando o mesmo exemplo com o uso do RecyclerView?

Obrigado.

4 respostas

Olá Raphael,

O funcionamento da RecyclerView é um pouquinho diferente mesmo e dá um pouco mais de trabalho. Nós temos um post no blog da Alura explicando direitinho como utilizar esse componente:

http://blog.alura.com.br/criando-listas-com-recyclerview/

Acho que pode te ajudar!

Olá Jeferson, td bem?

Então, gostaria de agradecer pela dica do post e já até implementei, mas infelizmente ainda estou tendo problemas na hora de visualizar minha lista.

Fiquei um pouco confuso se faço uso do ArrayList nesta implementação ou não e como ele poderia ser usado com o RecyclerView, uma vez que está dando erro quando chamo o setAdapter... vou mostrar como está escrito meu código:

MainActivity

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;

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


        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

        LivroDAO dao = new LivroDAO(this);
        List<Livro> livros = dao.pegaListaDeLivros();
        dao.close();


        Button botaoAdicionaLivro = (Button) findViewById(R.id.lista_livros_floating_button);
        botaoAdicionaLivro.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, Formulario.class);
                startActivity(intent);
            }
        });

        recyclerView.setAdapter(new LivrosAdapter(livros, this));
        RecyclerView.LayoutManager layout = new LinearLayoutManager(this,
                LinearLayoutManager.VERTICAL, false);

        recyclerView.setLayoutManager(layout);
        recyclerView.setHasFixedSize(true);


    }

    public void carregaLista() {

        LivroDAO dao = new LivroDAO (MainActivity.this);
        List<Livro> livros = dao.pegaListaDeLivros();
        dao.close();


        Button botaoAdicionaLivro = (Button) findViewById(R.id.lista_livros_floating_button);
        botaoAdicionaLivro.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, Formulario.class);
                startActivity(intent);
            }
        });

        recyclerView.setAdapter(new LivrosAdapter(livros, MainActivity.this));
        RecyclerView.LayoutManager layout = new LinearLayoutManager(this,
                LinearLayoutManager.VERTICAL, false);

        recyclerView.setLayoutManager(layout);
    }

    @Override
    public void onResume() {
        super.onResume();
        this.carregaLista();
    }

}

LivrosAdapter

public class LivrosAdapter extends RecyclerView.Adapter {

    private final List<Livro> livros;
    private final Context context;


    public LivrosAdapter(List<Livro> livros, Context context) {
        this.livros = livros;
        this.context = context;
    }

    public class NossoViewHolder extends  RecyclerView.ViewHolder{

        private final TextView campoNomeLivro;

        public NossoViewHolder(View view){
            super(view);
            campoNomeLivro = (TextView) view.findViewById(R.id.item_livro_nome);

        }
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(context).inflate(R.layout.item_livro, parent, false);

        NossoViewHolder holder = new NossoViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {

        NossoViewHolder holder = (NossoViewHolder) viewHolder;
        Livro livro = livros.get(position);
        holder.campoNomeLivro.setText(livro.getNomeLivro());

    }


    @Override
    public int getItemCount() {
        return livros.size();
    }
}

Olá Raphael,

Consegue postar aqui a stack trace completa do erro? Assim fica mais fácil a gente tentar encontrar o que pode estar errado.

Olá Jeferson,

Estou usando o mesmo código explicado lá no post. Ele não me gerou erros, porém quando adiciono um novo livro ele não aparace na minha lista. Levantei a dúvida com relação ao ArrayList, pois uso quando implemento com ListView.