2013-09-19 4 views
0

У меня есть база данных, и я показываю некоторые данные в ListView. Я хочу передать данные на другой вид деятельности, когда пользователь нажимает на элемент в ListViewКак получить идентификатор изнутри onItemClickListener?

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, переменная получает другое значение. Как получить правильное значение?

+0

Вы можете разместить свой код для адаптера? – petey

ответ

2

Конечно, значение будет перезаписано каждой итерацией loop. Вместо того, чтобы помещать их в переменную long, введите их в ArrayList. Затем используйте значение position в onItemClick(), чтобы получить это значение из 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); 
+0

Это работает \ o /. Большое спасибо @codeMagic. – Roland

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, поэтому он будет передан в onitemclicklistener в качестве параметра id:

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 

} 
Смежные вопросы