Remover conteúdo de uma List<>

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!!

Esqueci de dizer que é uma lista de restrições alimentares que aparece a tela, tipo: Sem lactose, Sem glúten,…) E o usuário vai marcar a opção desejada. Mas quero que salve só as que estiverem marcadas, as que eu marquei por engano e desmarco, quero que seja removida da lista.

Cara, eu fiz mais ou menos isso com uma lista de forma de pagamento. Aí o usuário escolhe qual forma ele quer utilizar para um pedido.

No Adapter

public class ViewHolder extends RecyclerView.ViewHolder {
        private final View view;
        // each data item is just a string in this case
    public TextView txtDescricaoFormaPagamento;

    public ViewHolder(View itemView) {
        super(itemView);
        this.view = itemView;
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                treatOnDataSelectedIfNecessary(v, getAdapterPosition());
            }
        });
        txtDescricaoFormaPagamento = (TextView) itemView.findViewById(R.id.txtDescricaoFormaPagamento);
    }
}

private void treatOnDataSelectedIfNecessary(View view, int position) {
    if (onDataSelected != null) {
        onDataSelected.onDataSelected(view, position);
    }
}

public static interface OnDataSelected {
    public void onDataSelected(View view, int position);
}

Na activity

@Override
public void onDataSelected(View view, int position) {
    formaPagamentoSelecionada = formasPagamento.get(position);

    if (view.isSelected()) {
        view.setSelected(false);
        view.setBackgroundColor(Color.TRANSPARENT);
    } else {
        view.setBackgroundColor(Color.GRAY);
        view.setSelected(true);
        if (posicaoAnterior != null && posicaoAnterior != position) {
            viewAnterior.setSelected(false);
            viewAnterior.setBackgroundColor(Color.TRANSPARENT);
        }
        posicaoAnterior = position;
        viewAnterior = view;
    }
    mAdapter.notifyDataSetChanged();
}

Olá, o que é o formaPagamentoSelecionada, o formasPagamento e a variável posicaoAnterior? Não achei a definição nos códigos.

Opa…

Então, a formaPagamentoSelecionada é onde armazeno o resultado do onClick do adapter. No meu caso, só posso ter uma forma de pagamento para cada pedido.
O formasPagamento é a lista com todas as formas de pagamento.

a posicaoAnterior é apenas para fazer o controle de seleção, para selecionar o registro ou não.