Как я могу изменить изображение внутри ListView? - PullRequest
1 голос
/ 16 июля 2011

Я прочитал другие посты и не нашел решения для себя.Я создал пользовательский ListView .Каждый элемент этого списка представляет собой сложный элемент, содержащий ImageView плюс два TextViews .После применения адаптера и заполнения списка я хочу изменить изображение внутри ImageView , но я хочу, чтобы это происходило не при событии щелчка.

private class ListAdapter extends ArrayAdapter<RSSItem> {

    private List<RSSItem> items;

    public ListAdapter(Context context, int textViewResourceId, List<RSSItem> items) {
        super(context, textViewResourceId, items);
        this.items = items;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.list_item, null);
        }
        RSSItem item = items.get(position);
        if (item != null) {
            ImageView image = (ImageView) v.findViewById(R.id.ivImage);
            TextView title = (TextView) v.findViewById(R.id.tvTitle);
            TextView description = (TextView) v.findViewById(R.id.tvDescription);
            if (image != null) {
                Drawable d = getResources().getDrawable(R.drawable.icon);
                image.setTag(item.getImageURL());
                image.setBackgroundDrawable(d);
            }
            if (title != null) {
                title.setText(item.getTitle());
            }
            if (description != null) {
                description.setText(item.toString());
            }
        }
        return v;
    }
}

Я пыталсячтобы получить контекст, но тогда я не знаю, как получить правильный ImageView .Я ценю любую помощь!

Ответы [ 3 ]

3 голосов
/ 17 июля 2011

Добавьте поле к вашему классу RSSItem, которое сообщает адаптеру, какое изображение отображать.В вашем методе AsyncTask.onPostExecute измените это значение и затем вызовите метод notifyDataSetChanged для ArrayAdapter.

Ваше переопределение getView() должно использовать значение, которое вы указали в RSSItem, чтобы выбрать изображение для отображения.Он будет вызываться снова для каждого элемента, когда вы звоните notifyDataSetChanged().

2 голосов
/ 17 июля 2011

Ленивая загрузка изображений внутри вашего ArrayAdapter

В Интернете есть отличные учебные пособия, в которых приведены полные примеры кода, как это сделать, а также включено кэширование, чтобы вы не загружали изображения больше, чемодин раз.

Кроме того, приложение для Android SHELVES, бесплатное приложение с открытым исходным кодом, написанное одним из инженеров Google, в котором также есть примеры многопоточности, ленивыйзагрузка и кеширование изображений для массиваадаптера.Я очень рекомендую прочитать этот код.

1 голос
/ 17 июля 2011

Вы можете попробовать это, если хотите изменить вид изображения извне функции getView () адаптера.

List<View> listOfViews = new ArrayList<View>();
listView1.reclaimViews(listOfViews);
for (View v : listOfViews)
{
    ImageView image = (ImageView)v.findViewById(R.id.image);
    image.setBackgroundDrawable(drawable);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...