如何从onItemClickListener里面获取一个id?

时间:2013-09-19 20:06:13

标签: java android sqlite android-listview

我有我的数据库,我在ListView中显示一些数据。当用户单击ListView中的项目

时,我想将数据传递给另一个活动
long idProjeto;
ProjetosDAO pDAO;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lista_projetos);

    ListView lv = (ListView)findViewById(R.id.lvListaProjetos);

    final ListaProjetosAdapter adapter = new ListaProjetosAdapter(this);


    pDAO = new ProjetosDAO(this);   
    pDAO.open();

    Cursor cursor = pDAO.consultaParaListaprojetos();
    String data = "";
    String cliente = "";
    String tipoProjeto = "";
    String status = "";     

    if(cursor != null && cursor.moveToFirst()){
        do{

            data = cursor.getString(0);
            cliente = cursor.getString(1);
            tipoProjeto = cursor.getString(2);
            status = cursor.getString(3);
            idProjeto = Long.parseLong(cursor.getString(4));

                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                try {

                    Date date = sdf.parse(data);
                    data = new SimpleDateFormat("dd/MM/yyyy HH:mm").format(date);                          

                } catch (ParseException e) {
                   e.printStackTrace();
                }

            adapter.addDadosListaprojetos(data, cliente, tipoProjeto, status, idProjeto);

        }while(cursor.moveToNext());
        cursor.close();
        pDAO.close();           
    }       

    lv.setAdapter(adapter);

    lv.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {


            Intent intent = new Intent(ListaProjetosActivity.this, ListaCheckinsActivity.class);    
            intent.putExtra("idProjeto", idProjeto);
            startActivity(intent);

        }
    });

}

public void novoProjeto(View v) {
    Intent intent = new Intent(this, NovoProjetoActivity.class);
    startActivity(intent);

}

}

我想将此idProjeto传递给另一个活动,但它只传递最后一项的数据。每个循环从while开始,变量得到其他值。 如何获得正确的价值?

2 个答案:

答案 0 :(得分:2)

当然,loop的每次迭代都会覆盖该值。而不是将它们放入long变量,而是将它们放入ArrayList。然后使用positiononItemClick()的值从ArrayList

中检索该值
   lv.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

        idProjeto = arrayList.get(position);  // assuming you create a member variable ArrayList<Long> arrayList = new ArrayList<Long>()
        Intent intent = new Intent(ListaProjetosActivity.this, ListaCheckinsActivity.class);    
        intent.putExtra("idProjeto", idProjeto);
        startActivity(intent);

答案 1 :(得分:0)

构建Projeto类以模拟对象:

public class Projeto {
    private long idProjeto;
    private String data;
    private String cliente;
    private String tipoProjeto;
    private String status;

    public Projeto() {
        super();
    }

    public Projeto(long idProjeto, String data, String cliente, String tipoProjeto, String status) {
        super();
        this.idProjeto = idProjeto;
        this.data = data;
        this.cliente = cliente;
        this.tipoProjeto = tipoProjeto;
        this.status = status;
    }

    public long getIdProjeto() {
        return idProjeto;
    }

    public void setIdProjeto(long idProjeto) {
        this.idProjeto = idProjeto;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public String getCliente() {
        return cliente;
    }

    public void setCliente(String cliente) {
        this.cliente = cliente;
    }

    public String getTipoProjeto() {
        return tipoProjeto;
    }

    public void setTipoProjeto(String tipoProjeto) {
        this.tipoProjeto = tipoProjeto;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

}

然后在你的适配器中将idProjeto字段作为id,因此它将作为id参数传递给onitemclicklistener:

public class ProjetoAdapter extends ArrayAdapter<Projeto> {

    public ProjetoAdapter(Context context, int resource,
            int textViewResourceId, List<Projeto> objects) {
        super(context, resource, textViewResourceId, objects);
    }

    public ProjetoAdapter(Context context, int resource,
            int textViewResourceId, Projeto[] objects) {
        super(context, resource, textViewResourceId, objects);
    }

    public ProjetoAdapter(Context context, int resource, int textViewResourceId) {
        super(context, resource, textViewResourceId);
    }

    public ProjetoAdapter(Context context, int resource, List<Projeto> objects) {
        super(context, resource, objects);
    }

    public ProjetoAdapter(Context context, int resource, Projeto[] objects) {
        super(context, resource, objects);
    }

    public ProjetoAdapter(Context context, int resource) {
        super(context, resource);
    }

    @Override
    public long getItemId(int position) {
        return this.getItem(position).getIdProjeto();
    }

    // Other methods that you want to override

}