Olá, preciso muito de uma ajuda. Tenho um List<> de Restricoes e uso um adapter para popular essa List com informações que vem do banco.
Nessa lista tenho um layout que tem um CheckedTextView, e ao clicar em um item eu adiciono as informações nessa List. Só que eu quero que quando o CheckedTextView estiver selecionado e eu clicar novamente, essas informações sejam removidas da List e salvem no banco só as que estiverem marcadas. Mas não consigo tirar, salvam mesmo eu desmarcando as opções.
Meu adaptador é esse:
public class AdaptadorListaRestricoes extends ArrayAdapter<Restricao> {
private int resorceId;
private LayoutInflater inflater;
public static List<Restricao> listrestricao = new ArrayList<>();
public AdaptadorListaRestricoes(Context context, int resource, List<Restricao> objects) {
super(context, resource, objects);
this.resorceId = resource;
this.inflater = LayoutInflater.from(context);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final Restricao restricao = getItem(position);
convertView = inflater.inflate(resorceId, null);
final CheckedTextView ctv = (CheckedTextView) convertView.findViewById(R.id.checkedTextView);
ctv.setText(restricao.getRestricao());
ctv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//aqui quero que remova da lista o que tava marcado e eu desmarquei
boolean isChecked = ctv.isChecked();
if (isChecked) {
ctv.setChecked(false);
// listrestricao.remove(new Restricao(restricao.getIdrestricao(),restricao.getIdreceita(),restricao.getRestricao())); Nao funcionou
}else{
//aqui adiciona na lista o que eu marquei para salvar depois no banco
ctv.setChecked(true);
listrestricao.add(new Restricao(restricao.getIdrestricao(), restricao.getIdreceita(), restricao.getRestricao()));
}
}
});
return convertView;
}
}
Aqui a classe onde está o adaptador:
public class CadastroReceita extends AppCompatActivity {
private ListView listRestricao;
AdaptadorListaRestricoes adaptRestricao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
.....//codigos
setContentView(R.layout.activity_cadastro_receita);
listRestricao = (ListView) findViewById(R.id.listarestricao);
buscaRestricoes();
}
//metodo que retorna do banco a lista de restricoes
public void buscaRestricoes(){
RetrofitService service = ServiceGenerator.createService(RetrofitService.class);
Call<List<Restricao>> call = service.obterRestricoes();
call.enqueue(new Callback<List<Restricao>>() {
@Override
public void onResponse(Call<List<Restricao>> call, Response<List<Restricao>> response) {
if (response.isSuccessful()) {
List<Restricao> resposta = response.body();
adaptRestricao = new AdaptadorListaRestricoes(CadastroReceita.this,R.layout.item_lista_cad_restricoes_receita, resposta);
listRestricao.setAdapter(adaptRestricao);
}else {
String st = response.errorBody().toString();
Toast.makeText(getApplicationContext(),"Resposta não foi sucesso = "+st, Toast.LENGTH_SHORT).show();
// segura os erros de requisição
ResponseBody errorBody = response.errorBody();
//setaErro(st);
}
}
@Override
public void onFailure(Call<List<Restricao>> call, Throwable t) {
if(call.isCanceled()) {
//requisição foi cancelada
Toast.makeText(getApplicationContext(), "Requisição cancelada", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(getApplicationContext(), "Erro na chamada ao servidor", Toast.LENGTH_SHORT).show();
//setaErro(t.getMessage());
}
}
});
}
}
Agradeço quem puder ajudar, já tentei de tudo e nada funciona!!