2

皆さんこんにちは。SQL データベースを使用して個人辞書を作成しました。そこで、アプリからのメイン アクティビティ (データベースに挿入された特定のデータの検索) の「リストビュー」を更新する検索フィールドとして「オートコンプリート テキストビュー」を追加したいと思います。ご覧のとおり、メイン アクティビティには、テーブルの WORDS (最初の列) のリストが表示されます。SQL データベースを使用して、textwatcher などの検索ボックスを作成する方法がわかりません。誰かが私を助けることができますか?私は初心者です!

ソースコード:

リポジトリPalavra.JAVA

public class RepositorioPalavra {
private static final String CATEGORIA = "dados";

// Nome do banco
private static final String NOME_BANCO = "dados_android";
// Nome da tabela
public static final String NOME_TABELA = "palavra";

protected SQLiteDatabase db;

public RepositorioPalavra(Context ctx) {
    // Abre o banco de dados já existente
    db = ctx.openOrCreateDatabase(NOME_BANCO, Context.MODE_PRIVATE, null);
}

protected RepositorioPalavra() {
    // Apenas para criar uma subclasse...
}

// Salva o carro, insere um novo ou atualiza
public long salvar(Palavra palavra) {
    long id = palavra.id;

    if (id != 0) {
        atualizar(palavra);
    } else {
        // Insere novo
        id = inserir(palavra);
    }

    return id;
}

// Insere um novo carro
public long inserir(Palavra palavra) {
    ContentValues values = new ContentValues();
    values.put(Palavras.WORD, palavra.word);
    values.put(Palavras.DEFINITION, palavra.definition);
    values.put(Palavras.EXAMPLE, palavra.example);

    long id = inserir(values);
    return id;
}

// Insere um novo carro
public long inserir(ContentValues valores) {
    long id = db.insert(NOME_TABELA, "", valores);
    return id;
}

// Atualiza o carro no banco. O id do carro é utilizado.
public int atualizar(Palavra palavra) {
    ContentValues values = new ContentValues();
    values.put(Palavras.WORD, palavra.word);
    values.put(Palavras.DEFINITION, palavra.definition);
    values.put(Palavras.EXAMPLE, palavra.example);

    String _id = String.valueOf(palavra.id);

    String where = Palavras._ID + "=?";
    String[] whereArgs = new String[] { _id };

    int count = atualizar(values, where, whereArgs);

    return count;
}

// Atualiza o carro com os valores abaixo
// A cláusula where é utilizada para identificar o carro a ser atualizado
public int atualizar(ContentValues valores, String where, String[] whereArgs) {
    int count = db.update(NOME_TABELA, valores, where, whereArgs);
    Log.i(CATEGORIA, "Atualizou [" + count + "] registros");
    return count;
}

// Deleta o carro com o id fornecido
public int deletar(long id) {
    String where = Palavras._ID + "=?";

    String _id = String.valueOf(id);
    String[] whereArgs = new String[] { _id };

    int count = deletar(where, whereArgs);

    return count;
}

// Deleta o carro com os argumentos fornecidos
public int deletar(String where, String[] whereArgs) {
    int count = db.delete(NOME_TABELA, where, whereArgs);
    Log.i(CATEGORIA, "Deletou [" + count + "] registros");
    return count;
}

// Busca o carro pelo id
public Palavra buscarPalavra(long id) {
    // select * from carro where _id=?
    Cursor c = db.query(true, NOME_TABELA, Palavra.colunas, Palavras._ID + "=" + id, null, null, null, null, null);

    if (c.getCount() > 0) {

        // Posicinoa no primeiro elemento do cursor
        c.moveToFirst();

        Palavra palavra = new Palavra();

        // Lê os dados
        palavra.id = c.getLong(0);
        palavra.word = c.getString(1);
        palavra.definition = c.getString(2);
        palavra.example = c.getString(3);

        return palavra;
    }

    return null;
}

// Retorna um cursor com todos os carros
public Cursor getCursor() {
    try {
        // select * from carros
        return db.query(NOME_TABELA, Palavra.colunas, null, null, null, null, Palavras.WORD);
    } catch (SQLException e) {
        Log.e(CATEGORIA, "Erro ao buscar as expressões: " + e.toString());
        return null;
    }
}

// Retorna uma lista com todos os carros
public List<Palavra> listarPalavras() {
    Cursor c = getCursor();

    List<Palavra> palavras = new ArrayList<Palavra>();

    if (c.moveToFirst()) {

        // Recupera os índices das colunas
        int idxId = c.getColumnIndex(Palavras._ID);
        int idxNome = c.getColumnIndex(Palavras.WORD);
        int idxPlaca = c.getColumnIndex(Palavras.DEFINITION);
        int idxAno = c.getColumnIndex(Palavras.EXAMPLE);

        // Loop até o final
        do {
            Palavra palavra = new Palavra();
            palavras.add(palavra);

            // recupera os atributos de carro
            palavra.id = c.getLong(idxId);
            palavra.word = c.getString(idxNome);
            palavra.definition = c.getString(idxPlaca);
            palavra.example = c.getString(idxAno);

        } while (c.moveToNext());
    }

    return palavras;
}

// Busca o carro pelo nome "select * from carro where nome=?"
public Palavra buscarPalavraPorNome(String word) {
    Palavra palavra = null;

    try {
        // Idem a: SELECT _id,nome,placa,ano from CARRO where nome = ?
        Cursor c = db.query(NOME_TABELA, Palavra.colunas, Palavras.WORD + "='" + word + "'", null, null, null, null);

        // Se encontrou...
        if (c.moveToNext()) {

            palavra = new Palavra();

            // utiliza os métodos getLong(), getString(), getInt(), etc para recuperar os valores
            palavra.id = c.getLong(0);
            palavra.word = c.getString(1);
            palavra.definition = c.getString(2);
            palavra.example = c.getString(3);
        }
    } catch (SQLException e) {
        Log.e(CATEGORIA, "Erro ao buscar a expressão pelo nome: " + e.toString());
        return null;
    }

    return palavra;
}

// Busca um carro utilizando as configurações definidas no
// SQLiteQueryBuilder
// Utilizado pelo Content Provider de carro
public Cursor query(SQLiteQueryBuilder queryBuilder, String[] projection, String selection, String[] selectionArgs,
        String groupBy, String having, String orderBy) {
    Cursor c = queryBuilder.query(this.db, projection, selection, selectionArgs, groupBy, having, orderBy);
    return c;
}

// Fecha o banco
public void fechar() {
    // fecha o banco de dados
    if (db != null) {
        db.close();
    }
}
}

Palavra.Java

public class Palavra {

public static String[] colunas = new String[] { Palavras._ID, Palavras.WORD, Palavras.DEFINITION, Palavras.EXAMPLE };

/**
 * Pacote do Content Provider. Precisa ser único.
 */
public static final String AUTHORITY = "br.dicionario.provider.palavra";

public long id;
public String word;
public String definition;
public String example;

public Palavra() {
}

public Palavra(String word, String definition, String example) {
    super();
    this.word = word;
    this.definition = definition;
    this.example = example;
}

public Palavra(long id, String word, String definition, String example) {
    super();
    this.id = id;
    this.word = word;
    this.definition = definition;
    this.example = example;
}

/**
 * Classe interna para representar as colunas e ser utilizada por um Content
 * Provider
 * 
 * Filha de BaseColumns que já define (_id e _count), para seguir o padrão
 * Android
 */
public static final class Palavras implements BaseColumns {

    // Não pode instanciar esta Classe
    private Palavras() {
    }

    // content://br.livro.android.provider.carro/carros
    public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/palavras");

    // Mime Type para todos os carros
    public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.google.palavras";

    // Mime Type para um único carro
    public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.google.palavras";

    // Ordenação default para inserir no order by
    public static final String DEFAULT_SORT_ORDER = "_id ASC";

    public static final String WORD = "word";
    public static final String DEFINITION = "definition";
    public static final String EXAMPLE = "example";

    // Método que constrói uma Uri para um Carro específico, com o seu id
    // A Uri é no formato "content://br.livro.android.provider.carro/carros/id"
    public static Uri getUriId(long id) {
        // Adiciona o id na URI default do /carros
        Uri uriPalavra = ContentUris.withAppendedId(Palavras.CONTENT_URI, id);
        return uriPalavra;
    }
}

@Override
public String toString() {
    return "Word: " + word + ", Definition: " + definition + ", Example: " + example;
}

}

CadastroPalavras.Java

public class CadastroPalavras extends ListActivity {
protected static final int INSERIR_EDITAR = 1;
protected static final int BUSCAR = 2;
protected static final int EDITAR = 3;

public static RepositorioPalavra repositorio;

private List<Palavra> palavras;

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    repositorio = new RepositorioPalavraScript(this);
    atualizarLista();
}

protected void atualizarLista() {
    // Pega a lista de carros e exibe na tela
    palavras = repositorio.listarPalavras();

    // Adaptador de lista customizado para cada linha de um carro
    setListAdapter(new PalavraListAdapter(this, palavras));
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    menu.add(0, INSERIR_EDITAR, 0, "Adicionar").setIcon(R.drawable.novo);
    menu.add(0, BUSCAR, 0, "Buscar").setIcon(R.drawable.pesquisar);
    menu.add(0, EDITAR, 0, "Editar").setIcon(R.drawable.novo);
    return true;
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    // Clicou no menu
    switch (item.getItemId()) {
    case INSERIR_EDITAR:
        // Abre a tela com o formulário para adicionar
        startActivityForResult(new Intent(this, Adicionar.class), INSERIR_EDITAR);
        break;
    case BUSCAR:
        // Abre a tela para buscar o carro pelo nome
        startActivity(new Intent(this, BuscarPalavra.class));
        break;
    case EDITAR:
        // Abre a tela para buscar o carro pelo nome
        startActivity(new Intent(this, Editar.class));
        break;
    }
    return true;
}

@Override
protected void onListItemClick(ListView l, View v, int posicao, long id) {
    super.onListItemClick(l, v, posicao, id);
    editarPalavra(posicao);
}

// Recupera o id do carro, e abre a tela de edição
protected void editarPalavra(int posicao) {
    // Usuário clicou em algum carro da lista
    // Recupera o carro selecionado
    Palavra palavra = palavras.get(posicao);
    // Cria a intent para abrir a tela de editar
    Intent it = new Intent(this, DetalhePalavra.class);
    // Passa o id do carro como parâmetro
    it.putExtra(Palavras._ID, palavra.id);
    // Abre a tela de edição
    startActivityForResult(it, INSERIR_EDITAR);
}

@Override
protected void onActivityResult(int codigo, int codigoRetorno, Intent it) {
    super.onActivityResult(codigo, codigoRetorno, it);

    // Quando a activity EditarCarro retornar, seja se foi para adicionar vamos atualizar a lista
    if (codigoRetorno == RESULT_OK) {
        // atualiza a lista na tela
        atualizarLista();
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();

    // Fecha o banco
    repositorio.fechar();
}
}

PalavraListAdapter.Java

public class PalavraListAdapter extends BaseAdapter {
private Context context;
private List<Palavra> lista;

public PalavraListAdapter(Context context, List<Palavra> lista) {
    this.context = context;
    this.lista = lista;
}

public int getCount() {
    return lista.size();
}

public Object getItem(int position) {
    return lista.get(position);
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    // Recupera o Carro da posição atual
    Palavra c = lista.get(position);

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.palavra_linha_tabela, null);

    // Atualiza o valor do TextView 
    TextView word = (TextView) view.findViewById(R.id.word);
    word.setText(c.word);



    return view;
}

}

エディタPalavra.Java

public class EditarPalavra extends Activity {
static final int RESULT_SALVAR = 1;
static final int RESULT_EXCLUIR = 2;
static final int RESULT_APAGAR = 3;

// Campos texto
private EditText campoWord;
private EditText campoDefinition;
private EditText campoExample;
private Long id;

@Override
protected void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    setContentView(R.layout.form_editar_palavra);

    campoWord = (EditText) findViewById(R.id.campoWord);
    campoDefinition = (EditText) findViewById(R.id.campoDefinition);
    campoExample = (EditText) findViewById(R.id.campoExample);

    id = null;

    Bundle extras = getIntent().getExtras();
    // Se for para Editar, recuperar os valores ...
    if (extras != null) {
        id = extras.getLong(Palavras._ID);

        if (id != null) {
            // é uma edição, busca o carro...
            Palavra c = buscarPalavra(id);
            campoWord.setText(c.word);
            campoDefinition.setText(c.definition);
            campoExample.setText(String.valueOf(c.example));
        }
    }

    ImageButton btCancelar = (ImageButton) findViewById(R.id.btCancelar);
    btCancelar.setOnClickListener(new OnClickListener() {
        public void onClick(View view) {
            setResult(RESULT_CANCELED);
            // Fecha a tela
            finish();
        }
    });

    // Listener para salvar o carro
    ImageButton btSalvar = (ImageButton) findViewById(R.id.btSalvar);
    btSalvar.setOnClickListener(new OnClickListener() {
        public void onClick(View view) {
            salvar();
        }
    });




    ImageButton btExcluir = (ImageButton) findViewById(R.id.btExcluir);

    if (id == null) {
        // Se id está nulo, não pode excluir
        btExcluir.setVisibility(View.INVISIBLE);
    } else {
        // Listener para excluir o carro
        btExcluir.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                excluir();
            }
        });


    }
}

@Override
protected void onPause() {
    super.onPause();
    // Cancela para não ficar nada na tela pendente
    setResult(RESULT_CANCELED);

    // Fecha a tela
    finish();
}

public void salvar() {


    Palavra palavra = new Palavra();
    if (id != null) {
        // É uma atualização
        palavra.id = id;
    }
    palavra.word = campoWord.getText().toString();
    palavra.definition = campoDefinition.getText().toString();
    palavra.example = campoExample.getText().toString();

    // Salvar
    salvarPalavra(palavra);

    // OK
    setResult(RESULT_OK, new Intent());

    // Fecha a tela
    finish();
}

public void excluir() {
    if (id != null) {
        excluirPalavra(id);
    }

    // OK
    setResult(RESULT_OK, new Intent());

    // Fecha a tela
    finish();
}

// Buscar o carro pelo id
protected Palavra buscarPalavra(long id) {
    return CadastroPalavras.repositorio.buscarPalavra(id);
}

// Salvar o carro
protected void salvarPalavra(Palavra palavra) {
    CadastroPalavras.repositorio.salvar(palavra);
}

// Excluir o carro
protected void excluirPalavra(long id) {
    CadastroPalavras.repositorio.deletar(id);
}
 }
4

1 に答える 1