RecyclerView

Gente,

Estou precisando de uma luz para um trabalho.

Pois bem, criei um recyclerview e dentro desses itens criei dois botões, queria saber como eu coloco funções nos cliques desses botões. Tentei pegar os botões pelo MainActivity mas eles vem nulo, precisa pegar a posição deles também para poder removê-los da lista. obg.

public class MainActivity extends AppCompatActivity {

private RecyclerView recyclerView;
private Button mMainButton;
private Button botaoIniciar;
private Button botaoConcluir;

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

    final TarefaDao tarefaDao = new TarefaDao(this);

    List<Tarefa> tarefas = new ArrayList<Tarefa>();
    List<Tarefa> tarefasAdicionadas = tarefaDao.findAll();
    if (tarefasAdicionadas != null) {
        tarefas.addAll(tarefasAdicionadas);
    }


    MyAdapter adapter = new MyAdapter(this, tarefas);
    LinearLayoutManager llm = new LinearLayoutManager(this);
    recyclerView = (RecyclerView) findViewById(R.id.main_recyclerview);
    recyclerView.setLayoutManager(llm);
    recyclerView.setAdapter(adapter);

    mMainButton = (Button) findViewById(R.id.botao_nova_tarefa);
    mMainButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent it = new Intent(MainActivity.this, CadastroActivity.class);
            startActivity(it);
        }
    });

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private LayoutInflater layoutInflater;
private List tarefas;

public MyAdapter(Context context, List<Tarefa> tarefas) {
    this.layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.tarefas = tarefas;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = layoutInflater.inflate(R.layout.item_layout, parent, false);
    MyViewHolder myViewHolder = new MyViewHolder(view);
    return myViewHolder;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    Tarefa tarefa = tarefas.get(position);
    holder.tituloView.setText(tarefa.getTitulo().toString());
    holder.descricaoView.setText(tarefa.getDescricao().toString());
    holder.pomodorosView.setText("Pomodoros:" + tarefa.getPomodoros().toString());
    holder.imageView.setBackgroundResource(R.mipmap.ic_launcher);
}

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

public class MyViewHolder extends RecyclerView.ViewHolder{

    TextView tituloView;
    TextView descricaoView;
    TextView pomodorosView;
    ImageView imageView;

    public MyViewHolder (View itemView) {
        super(itemView);
        tituloView = (TextView) itemView.findViewById(R.id.tituloView);
        descricaoView = (TextView) itemView.findViewById(R.id.descricaoView);
        pomodorosView = (TextView) itemView.findViewById(R.id.pomodorosView);
        imageView = (ImageView) itemView.findViewById(R.id.imageView);
    }
}

}

Olá Eiro,

Você deve fazer isso no seu MyAdapter, declara ele no MyViewHolder:

Button mMainButton;

mMainButton = (Button) itemView.findViewById(R.id.botao_nova_tarefa);

Depois, dentro do onBindViewHolder você coloca a ação de click:

holder.mMainButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent it = new Intent(MainActivity.this, CadastroActivity.class);
            startActivity(it);
        }
    });

Ai você pode fazer o que quiser, trocar a cor, esconder o botão e etc…

Abraços.

No caso o botão era pra deletar do banco e da lista, mas não consigo dar um refresh na lista e fica o lixo na tela, como eu faço para dar um refresh?

eu fiz isso mas não deu certo;

public void onBindViewHolder(final MyViewHolder holder, final int position) {
final Tarefa tarefa = tarefas.get(position);
holder.tituloView.setText(tarefa.getTitulo().toString());
holder.descricaoView.setText(tarefa.getDescricao().toString());
holder.pomodorosView.setText(“Pomodoros:” + tarefa.getPomodoros().toString());
holder.imageView.setBackgroundResource(R.mipmap.ic_launcher);

    botaoConcluir.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            final TarefaDao tarefaDao = new TarefaDao(v.getContext());
            tarefas.remove(position);
            tarefaDao.delete(tarefa);
        }
    });
}

Para atualizar a recycleview pode usar assim:

        @Override
        public void onClick(View v) {
           
            mList.remove(position);
            notifyItemRemoved(position);
            notifyItemRangeChanged(position, mList.size());
            notifyDataSetChanged();
           
        }
    });