2009-12-19 4 views
0

J'ai un ListView dans ma classe ListActivity étendue.android 101 - question d'héritage listview

Et puis j'ai le code suivant pour détecter le clic sur la liste

protected void onListItemClick(ListView l, View v, int position, long id) 
{ 
    Log.i("", ""+l.getSelectedItem().toString()); 
} 

Je veux obtenir la chaîne de données associée à mon clic.

  1. Lorsque j'exécute le code, j'obtiens une erreur avec getSelectedItem().

http://developer.android.com/reference/android/widget/ListView.html. getSelectedItem() n'est pas une méthode de ListView mais est définie dans la superclasse AdapterView. Comment est-ce possible? Roulant des yeux

2. Aussi, je ne suis pas sûr que je comprends cette ligne: android.widget.AdapterView quand il hérite aussi de android.view.ViewGroup n'est pas l'héritage multiple?

Répondre

1
  1. Vous pouvez obtenir une trace de pile Java via adb logcat, DDMS, ou la perspective DDMS dans Eclipse, qui vous aidera à épingler votre erreur.

  2. Cela illustre un arbre d'héritage, qui est pris en charge par la plupart des langages OO modernes. ViewGroup est le parent de AdapterView qui est le parent de AbsListView qui est le parent de ListView.

1
  1. la meilleure façon de faire cela est probablement ceci:.

    getListView() setOnItemClickListener (this); // dans ListActivity.onCreate

puis ajoutez cette méthode:

public void onItemClick(AdapterView<?> adapter, View v, int position, long id) { 
    getListAdapter().getItem(id); //you may need to cast this to whatever you expect 
} 
  1. vous pouvez jeter un oeil à l'arbre d'héritage - là, vous pouvez voir que pas d'héritage multiple est impliqué dans ce cas :)

    • java.lang.Object
    • android.view.View
    • android.view.ViewGroup
    • android.widget.AdapterView
    • android.widget.AbsListView
    • android.widget.ListView