Android: как динамически загружать изображения ресурсов в ListView? - PullRequest
2 голосов
/ 04 июня 2011

У меня есть куча изображений ресурсов, и я хочу отобразить определенное изображение для каждого элемента ListView. В настоящее время у меня есть файл row.xml, в котором каждый элемент отображает изображение значка. Я хочу использовать тот же формат, который я указал в row.xml, но каждый раз меняю изображение на любое другое.

Я провел некоторое исследование "отложенной загрузки", но кажется, что оно слишком сложное и к нему не относится.

Ответы [ 3 ]

1 голос
/ 04 июня 2011

Хорошо, чтобы расширить ответ выше, вы делаете «адаптер», подобный показанному в коде ниже:

package com.example.consumer.adapter;

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.example.consumer.R;
import com.example.consumer.model.AppModel;
import com.example.consumer.model.Deal;

public class DealListAdapter extends BaseAdapter {

    private static ArrayList<Deal> dealArrayList = new ArrayList<Deal>();

    private LayoutInflater inflator;
    private AppModel appModel;

    public DealListAdapter(Context context, ArrayList<Deal> results) {
        dealArrayList = results;
        inflator = LayoutInflater.from(context);
        appModel = (AppModel) context.getApplicationContext();
    }

    public int getCount() {
        if (dealArrayList == null)
            return 0;
        else
            return dealArrayList.size();
    }

    public Object getItem(int position) {
        try {
            return dealArrayList.get(position);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = inflator.inflate(R.layout.list_item_deal, null);
            holder = new ViewHolder();
            holder.name = (TextView) convertView.findViewById(R.id.deal_listview_item_one);
            holder.distance = (TextView) convertView.findViewById(R.id.deal_listview_item_two);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.name.setText(dealArrayList.get(position).getMerchantName() + ":  "+ dealArrayList.get(position).getTitle());
        holder.distance.setText(dealArrayList.get(position).getDistanceFormatted(appModel.getLocation()));

        return convertView;
    }

    static class ViewHolder {
        TextView name;
        TextView distance;
    }
}

Обратите внимание на использование ViewHolder - это сэкономит много вызовов "findViewById".

Чтобы использовать этот адаптер в вашем списке, вы используете этот код:

    dealList = (ListView) findViewById(R.id.browse_list_view);
    dealListAdapter = new DealListAdapter(this, dealList);
    dealList.setAdapter(dealListAdapter);

Где в этом случае dealList - это массив списков сделок (вы бы использовали другой пользовательский объект)

Надеюсь, это поможет вам при программировании OO ...:)

1 голос
/ 04 июня 2011

Вам следует переопределить метод getView вашего адаптера listview, чтобы он возвращал компонент, который накачает ваш row.xml. Этот компонент может быть настроен перед возвратом.

Вот пример:

@Override
public View getView(int position, View convertView, ViewGroup parent) 
{
    //where myview is your custom class loading your row.xml 
    if( !(convertView instanceof MyView) )
        convertView = new  MyView();

    MyView v = (MyView) convertView;
    v.setImage( <your image depending on position> );
    return convertView;
}//met

С уважением, Stéphane

0 голосов
/ 16 сентября 2013

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

https://github.com/nostra13/Android-Universal-Image-Loader

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...