0

我有我的数据库,我在 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中,变量获取其他值。如何获得正确的值?

4

2 回答 2

2

当然,每次迭代都会覆盖该值loop。与其将它们放入long变量中,不如将它们放入ArrayList. 然后使用positioninonItemClick()的值从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);
于 2013-09-19T20:28:29.670 回答
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

}
于 2013-09-19T20:33:18.700 回答