2013-06-07 5 views
0

Je voulais juste poser à ce sujet depuis que je l'ai trouvé vraiment bizarre et je ne peux pas dire pourquoi cela se passait. Eh bien, je pense que le code va tout expliquer et je voulais juste savoir pourquoi cela arrive.Obtenez le numéro d'article sélectionné sur la ListView

record_list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
     SELECTED_ITEM_ON_LIST = (String)(record_list.getItemAtPosition(i)); 



     Log.v("Selected adapterView", String.valueOf(adapterView.getSelectedItem())); 
     Log.v("Selected adapterView", String.valueOf(adapterView.getFocusedChild())); 
     Log.v("Selected item position", String.valueOf(record_list.getSelectedItem())); 
     Log.v("Selected item position", String.valueOf(record_list.getSelectedItemPosition())); 
     Log.v("adapterView", String.valueOf(adapterView.getCount())); 
     Log.v("View", String.valueOf(view.isSelected())); 
     Log.v("recordList", String.valueOf(record_list.getCount())); 
     Log.v("Selected item", SELECTED_ITEM_ON_LIST); 
    } 

}); 

et les journaux:

sur le premier clic pour awesome2:

V/Selected adapterView: null 
06-07 09:45:12.398 8488-8488/com.test.testaudio    V/Selected adapterView: null 
06-07 09:45:12.408 8488-8488/com.test.testaudio    V/Selected item position: null 
06-07 09:45:12.408 8488-8488/com.test.testaudio    V/Selected item position: -1 
06-07 09:45:12.408 8488-8488/com.test.testaudio    V/adapterView: 14 
06-07 09:45:12.408 8488-8488/com.test.testaudio    V/View: false 
06-07 09:45:12.408 8488-8488/com.test.testaudio    V/recordList: 14 
06-07 09:45:12.408 8488-8488/com.test.testaudio    V/Selected item: Awesome2 

second clic pour awesome4:

V/Selected adapterView: null 
06-07 09:45:37.099 8488-8488/com.test.testaudio    V/Selected adapterView: null 
06-07 09:45:37.108 8488-8488/com.test.testaudio    V/Selected item position: null 
06-07 09:45:37.108 8488-8488/com.test.testaudio    V/Selected item position: -1 
06-07 09:45:37.108 8488-8488/com.test.testaudio    V/adapterView: 14 
06-07 09:45:37.108 8488-8488/com.test.testaudio    V/View: false 
06-07 09:45:37.108 8488-8488/com.test.testaudio    V/recordList: 14 
06-07 09:45:37.108 8488-8488/com.test.testaudio    V/Selected item: Awesome4 

que vous pouvez voir la position de l'élément est toujours nul pour l'élément sélectionné et toujours -1 pour la position de l'élément sélectionné. Quelqu'un peut-il me dire pourquoi?

+0

Quel adaptateur utilisez-vous pour remplir votre listview? Pouvez-vous s'il vous plaît coller le code pour comment remplissez-vous le listview. – nidhi

Répondre

1

la position de l'élément est le troisième paramètre de onItemClick (votre int i)

Position int (à partir de 0), ou INVALID_POSITION s'il n'y a rien sélectionné.

getSelectedItemPosition et getSelectedItem renvoie une valeur! = 1 et! = Null si l'élément est sélectionné.

Le doc pour getSelectedItemPosition dit:

retours INVALID_POSITION s'il n'y a rien sélectionné.

+0

Oui, j'ai eu la partie de int i. mais pourquoi retourne -1 plutôt que 0? – KaHeL

+0

J'ai édité ma réponse – Blackbelt

0

habituellement j'utiliser un tableau global (celui utilisé pour remplir l'adaptateur) puis extraire la position i de cela, pour obtenir la valeur nécessaire:

//filling the adapter 
itemsAdapter = new ItemsAdapter(getApplicationContext(), 
       R.layout.vedi_rubrica_riga, m_arrDati); 

//on item click listener 
list.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
        long arg3) { 
       ApriRubrica(m_arrDati.get(position).get("id")); 

      } 
     }); 
0
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) 

variables ici i est la position de l'article dans la liste

Comme je vois sur ce page il ya setOnItemClickListener() et aussi setOnItemSelectedListener(). getSelectedItemPosition ne fonctionnera que dans ce dernier cas, je suppose.

+0

même réponse que dit par blackbelt. mais ce que je me demande, c'est pourquoi elle renvoie -1 plutôt que 0. la partie de null est déjà discutée par la même personne que j'ai mentionnée. :) – KaHeL

+0

vérifier ma réponse mise à jour –

0

Essayez ceci:

public class MainActivity extends Activity { 

    ListView record_list; 
    String[] arr = {"One", "Two", "Three"}; 

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

     record_list = (ListView)findViewById(R.id.recordList); 
     TextView tv = (TextView)findViewById(R.id.textView); 
     ArrayAdapter adpt = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,arr); 

     record_list.setAdapter(adpt); 

     record_list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 



      String st = (String)record_list.getItemAtPosition(arg2); 

      System.out.println("View:"+ arg1 + "item at position:"+ st); 
      } 

     }); 
    } 
} 
Questions connexes