如何获取数据库中的ID项?

时间:2016-05-06 14:08:49

标签: android listview android-arrayadapter onitemclicklistener

我是Android开发的新手,必须在点击的项目数据库中获取id的值。 已经搜索了几个帖子但没有找到答案。

以下是我的代码Listview:

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

        final BancoController bc = new BancoController(this);
        final ArrayList<JogadorEntidade> jogadorEntidade = bc.arrayJogador(this);

        listView = (ListView) findViewById(R.id.lvSelecionar);

        final SelecionaAdapter adapter = new SelecionaAdapter(this, R.layout.adapter_seleciona, jogadorEntidade);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setBackgroundTintList(ColorStateList.valueOf(background));
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alertInserirJogador(SelecionaJogadorAct.this);
            }
        });


        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                //I NEED THIS CODE
                
                Context context = getApplicationContext();
                CharSequence text = "ID: " + ", Posicao: " + position;
                int duration = Toast.LENGTH_SHORT;
                Toast.makeText(context, text, duration).show();

                //bc.deletaRegistro(id_player);

                Intent intent = getIntent();
                SelecionaJogadorAct.this.finish();
                startActivity(intent);
            }
        });
    }

我的适配器:

public class SelecionaAdapter extends ArrayAdapter<JogadorEntidade> {

    Context context;
    int layoutID;
    ArrayList<JogadorEntidade> alJogador;

    public SelecionaAdapter(Context context, int layoutID, ArrayList<JogadorEntidade> alJogador){
        super(context, layoutID, alJogador);
        this.context = context;
        this.alJogador = alJogador;
        this.layoutID = layoutID;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        View row = convertView;
        PlayerHolder holder = null;

        if (row == null){
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutID, parent, false);

            holder = new PlayerHolder();
            holder.txtNome = (TextView)row.findViewById(R.id.txtNomeSelecionar);
            holder.txtVitorias = (TextView)row.findViewById(R.id.txtVitóriasSelecionar);
            holder.txtDerrotas = (TextView)row.findViewById(R.id.txtDerrotasSelecionar);

            row.setTag(holder);
        }else {
            holder = (PlayerHolder)row.getTag();
        }

        JogadorEntidade jogadorEntidade = alJogador.get(position);
        holder.txtNome.setText(jogadorEntidade.getNome());
        holder.txtVitorias.setText("V: " + jogadorEntidade.vitórias);
        holder.txtDerrotas.setText("D: " + jogadorEntidade.derrotas);
        return row;
    }

    static class PlayerHolder{
        TextView txtNome;
        TextView txtVitorias;
        TextView txtDerrotas;
    }

JogadorEntidade:

public class JogadorEntidade {

    public String nome;
    public Integer id_jogador;
    public String vitórias;
    public String derrotas;

    public Integer getId_jogador() {
        return id_jogador;
    }

    public void setId_player(int id_player) {
        this.id_jogador = id_player;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getVitórias() {
        return vitórias;
    }

    public void setVitórias(String vitórias) {
        this.vitórias = vitórias;
    }

    public String getDerrotas() {
        return derrotas;
    }

    public void setDerrotas(String derrotas) {
        this.derrotas = derrotas;
    }

    public JogadorEntidade(String nome, String vitórias, String derrotas){
        super();
        this.nome = nome;
        this.vitórias = vitórias;
        this.derrotas = derrotas;
    }

    public JogadorEntidade(){}

public void insereJogador(JogadorEntidade jogadorEntidade) {

        db = banco.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(banco.NOME_JOGADOR, jogadorEntidade.getNome());
        values.put(banco.VITORIAS, jogadorEntidade.getVitórias());
        values.put(banco.DERROTAS, jogadorEntidade.getDerrotas());

        db.insert(CriaBanco.TABELA_JOGADOR, null, values);
        db.close();
    }
    

    public Cursor carregaJogador() {
        Cursor cursor;
        String[] campos = {banco.NOME_JOGADOR, banco.VITORIAS, banco.DERROTAS};
        db = banco.getReadableDatabase();
        cursor = db.query(banco.TABELA_JOGADOR, campos, null, null, null, null, null, null);

        if (cursor != null) {
            cursor.moveToFirst();
        }
        db.close();
        return cursor;
    }
    

    public void deletaRegistro(int id){
        String where = CriaBanco.ID_JOGADOR + "=" + id;
        db = banco.getReadableDatabase();
        db.delete(CriaBanco.TABELA_JOGADOR, where, null);
        db.close();
    }

    public ArrayList<JogadorEntidade> arrayJogador(Context context) {
        ArrayList<JogadorEntidade> al = new ArrayList<JogadorEntidade>();
        BancoController bancoController = new BancoController(context);
        Cursor cursor;
        cursor = bancoController.carregaJogador();

        if (cursor != null) {
            if (cursor.moveToFirst()) {
                String nome = cursor.getString(cursor.getColumnIndex(banco.NOME_JOGADOR));
                String vitorias = cursor.getString(cursor.getColumnIndex(banco.VITORIAS));
                String derrotas = cursor.getString(cursor.getColumnIndex(banco.DERROTAS));

                JogadorEntidade jogadorEntidade = new JogadorEntidade(nome, vitorias, derrotas);

                al.add(jogadorEntidade);
                while (cursor.moveToNext()) {
                    nome = cursor.getString(cursor.getColumnIndex(banco.NOME_JOGADOR));
                    vitorias = cursor.getString(cursor.getColumnIndex(banco.VITORIAS));
                    derrotas = cursor.getString(cursor.getColumnIndex(banco.DERROTAS));
                    jogadorEntidade = new JogadorEntidade(nome, vitorias, derrotas);
                    al.add(jogadorEntidade);
                }
            }
        }
        return al;
    }

1 个答案:

答案 0 :(得分:0)

首先,您需要在进行查询时请求id(如果id是在数据库中创建的列mame为_id,或者您可以使用tablename._id或您需要的任何内容):

String[] campos = {"_id", banco.NOME_JOGADOR, banco.VITORIAS, banco.DERROTAS};

然后你需要在读取光标时将id添加到对象:

public ArrayList<JogadorEntidade> arrayJogador(Context context) {
    ArrayList<JogadorEntidade> al = new ArrayList<JogadorEntidade>();
    BancoController bancoController = new BancoController(context);
    Cursor cursor;
    cursor = bancoController.carregaJogador();

    if (cursor != null) {
        if (cursor.moveToFirst()) {
            String nome = cursor.getString(cursor.getColumnIndex(banco.NOME_JOGADOR));
            String vitorias = cursor.getString(cursor.getColumnIndex(banco.VITORIAS));
            String derrotas = cursor.getString(cursor.getColumnIndex(banco.DERROTAS));
            long id = cursor.getLong(cursor.getColumnIndex("_id",0));

            JogadorEntidade jogadorEntidade = new JogadorEntidade(id, nome, vitorias, derrotas);

            al.add(jogadorEntidade);
            while (cursor.moveToNext()) {
                nome = cursor.getString(cursor.getColumnIndex(banco.NOME_JOGADOR));
                vitorias = cursor.getString(cursor.getColumnIndex(banco.VITORIAS));
                derrotas = cursor.getString(cursor.getColumnIndex(banco.DERROTAS));
            long id = cursor.getLong(cursor.getColumnIndex("_id",0));
                jogadorEntidade = new JogadorEntidade(id, nome, vitorias, derrotas);
                al.add(jogadorEntidade);
            }
        }
    }
    return al;
}

无论如何,这不是Android的方式。您应该阅读所有列表然后显示它。您应该使用视图模式,并仅在您要显示它时加载播放器。此外,您应该转到recyclerviews,而不是使用列表。此时可以考虑弃用列表视图。请参阅教程:http://developer.android.com/training/material/lists-cards.html