2013-02-28 16 views
5

Mam ListView, który ma dane z analizowanego JSON. Więc to jest mój przykładowy kod:Android ListView onItemClick

ArrayList<HashMap<String, String>> myList = new ArrayList<HashMap<String, String>>(); 

    /** 
    * parsing JSON... 
    * ... 
    * ... 
    * ... 
    */ 

ListAdapter adapter = new SimpleAdapter(this, myList, R.layout.s_layout, new String[]{NAME, TEXT}, new int[]{R.id.name, R.id.text}); 
    setListAdapter(adapter); 

lv.setOnItemClickListener(new OnItemClickListener(){ 

     public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 


      String inName = ((TextView) view.findViewById(R.id.name)).getText().toString(); 
      String inText = ((TextView) view.findViewById(R.id.text)).getText().toString(); 


      Intent intent = new Intent(getApplicationContext(), StaffProfileActivity.class); 

      intent.putExtra("staff_name", inName); 
      intent.putExtra("staff_desc", inText); 
      startActivity(intent); 
     } 
}); 

Moim problemem jest to, w jaki sposób mogę przekazać moje dane z intencją bez użycia

String inName = ((TextView) view.findViewById(R.id.name)).getText().toString(); 

To znaczy, jak się moje dane z mojego ListView i dać go do zamiar?

Odpowiedz

6

adapter.get(position) zwróci Ci numer HashMap<String, String> dla wybranego elementu. I używać List<T> definicja zamiast ArrayList<T>

+1

używa tego również? Obiekt ob = lv.getItemAtPosition (pozycja); – elL

+0

@elL, tak, to też jest poprawne –

+0

tak. dlatego go przyjąłem. – elL

3

Z documentation

public abstract void onItemClick (AdapterView rodzica, Widok, int pozycji, długo id)

metoda Callback się powoływać, gdy element w tym adapterze został kliknięty na . Wykonawcy mogą uzyskać wywołanie getItemAtPosition (pozycja), jeśli muszą uzyskać dostęp do danych powiązanych z wybranym elementem.

więc w onItemClick można odzyskać elementu:

HashMap<String, String> elt = myList.getItemAtPosition(position); 

a następnie uzyskać wartości inName a intext z ELT.

+0

to również jest poprawne – elL