Sie die img
Ansicht des Elements lokalisieren kann durch findViewById
auf den zweiten Parameter aufrufen (die View
des angeklickten Artikel ist) innerhalb des onItemClick
Handler:
public void onItemClick(AdapterView parentView, View clickedItemView, int pos, long id)
{
ImageView imageView = (ImageView) clickedItemView.findViewById(R.id.img);
// ...
}
EDIT: Beachten Sie, dass Android wieder verwendet Liste Element View
Objekte (auch Ansichtsrecycling genannt), so dass der Umschaltstatus jedes Elements zur späteren Verwendung gespeichert werden muss. Der Umschaltstatus jedes Elements muss immer dann aufgerufen werden, wenn eine Listenelementansicht an ein Listenelement zur Anzeige gebunden ist.
Zum Beispiel, hier arbeitet Beispiel einer Aktivität, die das Bild von jedem Punkt Klick schaltet:
import java.util.Arrays;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
public class SO4539968TestCaseActivity extends Activity {
private static final List<String> ITEM_TEXTS = Arrays.asList(new String[] {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"});
private boolean[] itemToggled;
private class MyArrayAdapter<T> extends ArrayAdapter<T>
{
public MyArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects) {
super(context, resource, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View itemView = super.getView(position, convertView, parent);
ImageView imageView = (ImageView) itemView.findViewById(R.id.img);
imageView.setImageResource(itemToggled[position] ? R.drawable.on : R.drawable.off);
return itemView;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
itemToggled = new boolean[ITEM_TEXTS.size()];
Arrays.fill(itemToggled, false);
ListView listView = (ListView) findViewById(R.id.list_view0);
listView.setAdapter(new MyArrayAdapter<String>(this, R.layout.list_item, R.id.txt, ITEM_TEXTS));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> listView, View itemView, int position, long id) {
itemToggled[position] = ! itemToggled[position];
ImageView imageView = (ImageView) itemView.findViewById(R.id.img);
imageView.setImageResource(itemToggled[position] ? R.drawable.on : R.drawable.off);
}
});
}
}
Die wichtige Teile sind der onItemClick
Rückruf und die Überschreibung von getView
in MyArrayAdapter
zu studieren.
Die getView
Methode der Adapter
Klasse ist verantwortlich für das Aufblasen des Artikellayouts. In diesem Beispiel nenne ich die getView
Methode der Superklasse, um zunächst den Punkt Ansicht vorbereiten, aber dann stelle ich sicher, in geeigneter Weise die Ressourcen-ID des img
Ansicht des Elements gesetzt:
imageView.setImageResource(itemToggled[position] ? R.drawable.on : R.drawable.off);
Siehe auch: Developing Applications for Android – Gotchas and Quirks
Vielen Dank. Es hat für mich funktioniert. Ich habe lange nach dieser Lösung gesucht, ungefähr einen Monat. Du hast mich gerettet: D – Vivek
Jetzt kann ich die Quelle von Imageview ändern, aber wenn ich unten scrolle und wieder zurückkomme, wird die Bildansicht auf ihre vorherige Quelle zurückgesetzt. Warum passiert dies? Kannst du mir helfen? – Vivek
@ Vivek: Es klingt wie ein Problem der Wiederverwendung von Ansichten. Bitte sehen Sie sich meine aktualisierte Antwort an, da ich ein funktionierendes Beispiel hinzugefügt und einen ausgezeichneten Blog-Beitrag verlinkt habe, in dem die Wiederverwendung von Ansichten durch Android beschrieben wird. –