1
resposta

Informações do objeto através de um toogle button

Olá, como faço para pegar informações de um objeto através da ação do click de um toogle button? No curso é mostrado como obter informações do objeto através do click na view holder, mas gostaria de saber qual em qual holder e as informações desse objeto para ele ser inserido en outra recyclerview. Desde já agradeço a atenção.


public class ListaPratosAvaliacaoAdapter extends RecyclerView.Adapter<ListaPratosAvaliacaoAdapter.PratoViewHolder> {
    private final Context context;
    private final List<PratoTipico> pratosAvaliacao;
    private OnItemClickListener onItemClickListener;

    public ListaPratosAvaliacaoAdapter(Context context, List<PratoTipico> pratos) {
        this.context = context;
        this.pratosAvaliacao = pratos;
    }
    public void setOnItemClickListener(OnItemClickListener onItemClickListener){
        this.onItemClickListener = onItemClickListener;
    }

    @NonNull
    @Override
    public ListaPratosAvaliacaoAdapter.PratoViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View viewCriada = LayoutInflater.from(context)
                .inflate(R.layout.item_prato_avaliacao,parent,false);
        return new PratoViewHolder(viewCriada);
    }

    @Override
    public void onBindViewHolder(@NonNull PratoViewHolder holder, int position) {
        PratoTipico prato = pratosAvaliacao.get(position);
        holder.vincula(prato);
    }

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

    class PratoViewHolder extends RecyclerView.ViewHolder{
        private final TextView titulo;
        private final TextView descricao;
        private PratoTipico prato;


        public PratoViewHolder(@NonNull final View itemView) {
            super(itemView);
            titulo = itemView.findViewById(R.id.item_prato_nome_avaliacao);
            descricao = itemView.findViewById(R.id.item_prato_descricao_avaliacao);
            ToggleButton toggleButton = itemView.findViewById(R.id.button_favorite);
            toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    int posicao = itemView.getId();
                    if (isChecked){
                        buttonView.
                    }else{
                        System.out.println("not checked" + posicao);
                    }
                }
            });

        }

        public void vincula(PratoTipico prato){
            this.prato = prato;
            titulo.setText(prato.getNome());
            descricao.setText(prato.getDescricao());
        }
    }



}

public class ListaPratosAvaliacao extends AppCompatActivity {
    PratoTipicoServices pratoTipicoServices = new PratoTipicoServices(this);
    private ListaPratosAvaliacaoAdapter adapter;
    private ToggleButton toggleButton;

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

    private void configuraRecyclerviewAvaliacao() {
        RecyclerView listaPratosAvaliacao = findViewById(R.id.lista_pratos_avaliacao_recyclerview);
        setAdapterAvaliacao(listaPratosAvaliacao);
    }

    private void setAdapterAvaliacao(RecyclerView recyclerView) {
        adapter = new ListaPratosAvaliacaoAdapter(this,geraListaFavoritos());
        recyclerView.setAdapter(adapter);
    }

    private List<PratoTipico> geraListaFavoritos(){return pratoTipicoServices.getLista();}

}
1 resposta

Oi Victor, tudo bem?

Vejamos se eu entendi, você quer pegar o listener do toggle e executar algo fora do Adapter? Se sim, você vai precisar criar uma interface que tem um método que recebe um boolean, como por exemplo:

interface OnCheckedChanged {
    void onChange(boolean isChecked);
}

Então, o seu adapter vai precisar compor essa interface assim como é feito na OnItemClickListener, a diferença é que ao identificar que ocorreu na mudança no toggle a partir onCheckedChanged que você está implementando, você vai chamar a interface nova do adapter enviando o isChecked como argumento.

Perceba que é basicamente a mesma ideia da identificação de clique, porém, vai ser uma nova interface para identificar essa ação.

[]s