Вы можете найти представление элемента img
, вызвав findViewById
для второго параметра (который является View
элемента, по которому щелкнули) в пределах onItemClick
обработчик:
public void onItemClick(AdapterView parentView, View clickedItemView, int pos, long id)
{
ImageView imageView = (ImageView) clickedItemView.findViewById(R.id.img);
// ...
}
РЕДАКТИРОВАНИЕ: Имейте в виду, что Android повторно использует элементы списка View
объекты (также называемые повторным использованием вида), поэтому состояние переключения каждого элемента необходимо сохранить для дальнейшего использования.использовать.К состоянию переключения каждого элемента необходимо обращаться всякий раз, когда представление элемента списка связано с элементом списка для отображения.
Например, вот рабочий пример действия, которое переключает изображение каждого элемента при нажатии:
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);
}
});
}
}
Важными частями для изучения являются обратный вызов onItemClick
и переопределение getView
в MyArrayAdapter
.
Метод getView
класс Adapter
отвечает за раздувание макета элемента.В этом примере я вызываю метод getView
суперкласса для первоначальной подготовки представления элемента, но затем проверяю, правильно ли установлен идентификатор ресурса для представления img
элемента:
imageView.setImageResource(itemToggled[position] ? R.drawable.on : R.drawable.off);
См.также: Разработка приложений для Android - Gotchas and Quirks