Gestão de Registros em Android: Exclusão via Clique Longo e Atualização Automática de Interface

Em aplicações de gerenciamento de dados, como um controle financeiro, a capacidade de visualizar e adicionar registros é fundamental, mas a gestão completa exige que o usuário possa remover entradas incorretas ou desnecessárias. Uma abordagem comum e intuitiva no Android para essa funcionalidade é o uso do evento de clique longo (long click) em componentes de lista.

Implementando a Exclusão com Confirmação

Para evitar exclusões acidentais, utilizamos um AlertDialog que solicita a confirmação do usuário antes de proceder com a remoção do registro no banco de dados SQLite. O exemplo abaixo demonstra como configurar o OnItemLongClickListener em uma ListView:


listViewRegistros.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        new AlertDialog.Builder(ActivityPrincipal.this)
                .setTitle("Remover Registro")
                .setMessage("Tem certeza que deseja apagar este item?")
                .setPositiveButton("Confirmar", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // Obtendo o ID real do banco de dados através do adaptador
                        String idAlvo = String.valueOf(meuAdaptador.getItemId(position));
                        SQLiteDatabase db = dbHelper.getWritableDatabase();
                        
                        // Executando a remoção baseada na chave primária
                        db.delete("tb_financas", "_id = ?", new String[]{idAlvo});
                        
                        Toast.makeText(getApplicationContext(), "Excluído com sucesso", Toast.LENGTH_SHORT).show();
                        
                        // Método para recarregar os dados na tela
                        recarregarInterface();
                    }
                })
                .setNegativeButton("Cancelar", (dialog, which) -> dialog.dismiss())
                .create()
                .show();
        return true;
    }
});

Ajustando o Adaptador para Identificação de Registros

Para que a exclusão funcione corretamente, o método getItemId do seu adaptador customizado deve retornar o ID real da linha no banco de dados, em vez de apenas a posição do item na lista visual. Geralmente, os objetos de modelo (POJOs) carregam esse ID. Veja como sobrescrever esse método:


@Override
public long getItemId(int position) {
    // Converte o ID armazenado no objeto da lista para o tipo long
    return Long.parseLong(listaObjetos.get(position).getIdBanco());
}

Atualização Dinâmica da Interface

Após a exclusão de registros, especialmente quando há dependências entre diferentes telas da aplicação, pode ser necessário garantir que a interface reflita o estado mais atualizado do banco de dados de forma automática. Uma das técnicas para realizar atualizações periódicas envolve o uso de Handler e Runnable para criar um ciclo de refresh.


private Handler refreshHandler = new Handler(Looper.getMainLooper()) {
    @Override
    public void handleMessage(Message msg) {
        executarSincronizacao();
    }
};

private Runnable refreshRunnable = new Runnable() {
    @Override
    public void run() {
        while (true) {
            try {
                // Define o intervalo de atualização (ex: 500ms)
                Thread.sleep(500);
                refreshHandler.sendEmptyMessage(0);
            } catch (InterruptedException e) {
                e.printStackTrace();
                break;
            }
        }
    }
};

private void executarSincronizacao() {
    // Lógica para remontar a View ou atualizar o Adaptador
    initComponentes();
}

Ao integrar o mecanismo de exclusão com a atualização constante da UI, a aplicação garante que o usuário sempre visualize o estado real dos dados, removendo inconsistências visuais imediatamente após a manipulação do banco de dados.

Tags: Android SDK sqlite listview AlertDialog Handler

Publicado em 7-24 02:32