Intereting Posts
Что такое параметр convertView в методе ArrayAdapter getView () Сделать новую активность за старой в процессе перехода Передача фокуса от родителя к детям в линейной компоновке Как использовать кнопки диалога диалогового окна стиля головоломки Android Есть ли компиляция ошибок устройства для устройств Android? Предварительный просмотр камеры выполняется в портретном режиме, но захваченное изображение вращается Обеспечить видимость в списке андроидов? Есть ли большой вариант кучи Android для старых телефонов, обновленных до ICS? Как рассчитать точное количество шагов ноги с помощью акселерометра в android? Программирование на Android: с чего начать создавать простой браузер файлов? Получить ресурс от Uri ProGuard и Gson на Android (ClassCastException) Android Paint: как получить эффект «аэрографа»? Android получает высоту и ширину макета в фрагменте Общие сведения о RecyclerView setHasFixedSize

Android: Динамическое изменение изображения в Listview

У меня есть список, определенный следующим xml. Мне нужно переключить изображение в списке во время выполнения, когда пользователь нажимает на любую строку. Как я могу это достичь? Любая помощь высоко ценится. благодаря

//list_item.xml <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/play" android:id="@+id/img" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:id="@+id/txt" /> </LinearLayout> 

Solutions Collecting From Web of "Android: Динамическое изменение изображения в Listview"

Вы можете найти представление img элемента, вызвав findViewById по второму параметру (который представляет собой View onItemClick элемента) внутри обработчика onItemClick :

 public void onItemClick(AdapterView parentView, View clickedItemView, int pos, long id) { ImageView imageView = (ImageView) clickedItemView.findViewById(R.id.img); // ... } 

EDIT: Имейте в виду, что элемент повторного использования Android повторно просматривает объекты (также называемые рекурсией просмотра), поэтому состояние переключения каждого элемента необходимо сохранить для последующего использования. Состояние переключения каждого элемента должно быть доступно, когда просмотр элемента списка привязан к элементу списка для отображения.

Например, вот рабочий пример активности, который переключает изображение каждого элемента на клик:

 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 вызов onItemClick и переопределение getView в MyArrayAdapter .

Метод getView класса Adapter отвечает за раздувание макета элемента. В этом примере я getView метод getView суперкласса, чтобы сначала подготовить представление элемента, но затем я уверен, чтобы правильно установить идентификатор ресурса в представлении img элемента:

 imageView.setImageResource(itemToggled[position] ? R.drawable.on : R.drawable.off); 

См. Также: Разработка приложений для Android – Gotchas and Quirks

  listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){ public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { ImageView imageView=arg1.findViewById(R.id.img); imageView.setImageResource(R.drawable.new_image); } }); 

Я буду генерировать динамически список, а затем привязываться к событию onclickitem, чтобы сделать setimageresource, как говорит Кирилл Кирилов.

Это можно сделать так легко, вам нужно просто взглянуть на позицию элемента списка, которую щелкнул пользователь. Хорошо описанный полный демо-код выглядит следующим образом:

  public class ChangeImageInListDynamically extends Activity { /** * Adapter for your data. */ ImageAdapter adpAR; ArrayList<String> itemList; ListView mListView; ImageAdapter mAdapter; /** * Indicate which item is currently selected. * Its default selected item is '0' eg, 1st item. */ private int selectedPosition=0; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main); itemList = new ArrayList<String>(); for (int i = 0; i < 11; i++) { itemList.add("Item - "+i); } mListView = (ListView)findViewById(R.id.data_list); //Initialize your adapter mAdapter = new ImageAdapter(nChangeImageInListDynamically.this, itemList); //set adapter to your list. mListView.setAdapter(mAdapter); //set list click listener. mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> av, View view, int position, long id) { //your image that need to change dynamically. ImageView imageView = (ImageView) view.findViewById(R.id.select); //position of clicked item. selectedPosition=position; //change image of respective image. imageView.setImageResource(R.drawable.selected); //notify your adapter to update your list. adpAR.notifyDataSetChanged(); } }); } static class ViewHolder { TextView title; ImageView img; } /** * Your ImageAdapter. */ public class ImageAdapter extends BaseAdapter { ArrayList<String> dataList; Context context; public ImageAdapter(Context context, ArrayList<String> arrayList) { this.context = context; this.dataList = arrayList; } @Override public int getCount() { // TODO Auto-generated method stub return dataList.size();; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; final ViewHolder holder; Log.d("posiiton ImageAdapater : ",""+position); if (row == null) { LayoutInflater inflater = ChangeImageInListDynamically.this.getLayoutInflater(); row = inflater.inflate(R.layout.listrow, null); holder = new ViewHolder(); holder.title = (TextView) row.findViewById(R.id.text); holder.img = (ImageView) row.findViewById(R.id.select); row.setTag(holder); } else { holder = (ViewHolder) row.getTag(); } //set titel text. holder.title.setText(dataList.get(position)); //Change Image of selected item dynamically. if(selectedPosition == position) { //Item is selected. holder.img.setImageResource(R.drawable.selected); }else{ //Other non-selected items. holder.img.setImageResource(R.drawable.dis_selected); } return row; } } } 

Надеюсь, это поможет всем 🙂

использование

 public void setImageResource (int resId); 

Метод класса ImageView.

PS Мой предыдущий ответ кажется неполным, вот целое решение:

 ImageView imageView = (ImageView) this.findViewById(R.id.img); ((BitmapDrawable)imageView.getDrawable()).getBitmap().recycle(); imageView.setImageResource(R.drawable.new_image); imageView.invalidate();