Как отображать удаленные изображения в ListView с помощью BaseAdapter?

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

  String flags[] ={"http://www.website.com/images/usa.png","http://www.website.com/images/china.png","http://www.website.com/images/australia.png","http://www.website.com/images/portugle.png","http://www.website.com/images/norway.png","http://www.website.com/images/new_zealand.png"};

Может ли эксперт показать мне, какую часть нужно заменить. Заранее спасибо.

Основная активность.java:

public class MainActivity extends Activity {

    ListView simpleList;
    String countryList[] = {"USA", "China", "australia", "Portugle", "Norway", "NewZealand"};
    int flags[] = {R.drawable.usa, R.drawable.china, R.drawable.australia, R.drawable.portugle, R.drawable.norway, R.drawable.new_zealand};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        simpleList = (ListView) findViewById(R.id.simpleListView);
        CustomAdapter customAdapter = new CustomAdapter(getApplicationContext(), countryList, flags);
        simpleList.setAdapter(customAdapter);

        simpleList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Toast.makeText(getApplicationContext(), "Hello " + countryList[position], Toast.LENGTH_LONG).show();


            }
        });
    }
}

Пользовательский адаптер.java:

Public class CustomAdapter extends BaseAdapter {
    Context context;
    String countryList[];
    int flags[];
    LayoutInflater inflter;

    public CustomAdapter(Context applicationContext, String[] countryList, int[] flags) {
        this.context = context;
        this.countryList = countryList;
        this.flags = flags;
        inflter = (LayoutInflater.from(applicationContext));
    }

    @Override
    public int getCount() {
        return countryList.length;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        view = inflter.inflate(R.layout.activity_listview, null);
        TextView country = (TextView) view.findViewById(R.id.textView);
        ImageView icon = (ImageView) view.findViewById(R.id.icon);
        country.setText(countryList[i]);
        icon.setImageResource(flags[i]);
        return view;
    }
}

person user1788736    schedule 03.12.2017    source источник


Ответы (3)


Тебе следует:

1) Загрузите эти изображения в отдельный поток, для этого вы можете использовать залп, модификацию, робоспайс.

2) При ответе любого из этих методов из 1) вы должны передать список значений, полученных от службы, в конструктор вашего адаптера. Вам нужно будет создать POJO для модели, эта структура будет содержать все элементы веб-сервиса REST.

3) Рекомендуется использовать держатель просмотра для вашего адаптера списка, чтобы избежать раздувания представлений снова и снова.

person HaroldSer    schedule 03.12.2017
comment
Спасибо за ответ . Я не очень разбираюсь в разработке для Android, поэтому не могли бы вы указать мне какой-нибудь учебник о том, как написать функцию и вызвать ее изнутри getView и передать ей массив изображений, чтобы он отображал их в списке? - person user1788736; 03.12.2017
comment
Да, вы можете пометить: simplifiedcoding.net/android-volley-tutorial-fetch -json - person HaroldSer; 03.12.2017
comment
Позже вы можете использовать привязку данных Джексона для сопоставления значений из ответа с POJO (классом модели). См. эту ссылку для справки: stackoverflow.com/questions/25545984/ - person HaroldSer; 03.12.2017

Проще всего использовать Glide или Пикассо:

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    view = inflter.inflate(R.layout.activity_listview, null);
    TextView country = (TextView) view.findViewById(R.id.textView);
    ImageView icon = (ImageView) view.findViewById(R.id.icon);
    country.setText(countryList[i]);

    // Assuming flags is now the list of Strings of image urls
    GlideApp.with(view.getContext()).load(flags[i]).into(icon);

    return view;
}
person dominicoder    schedule 03.12.2017
comment
Спасибо за ваш пост. не могли бы вы рассказать мне, как добавить GlideApp в Android Studio 2.2? я никогда не использовал его раньше. - person user1788736; 03.12.2017

вы также можете использовать некоторые сторонние библиотеки, такие как Picasso или Glide, для загрузки изображений прямо в метод просмотра вашего адаптера.

Picasso.with(this).load(flags[позиция адаптера]).into(imageView);

то же самое в скольжении.

вот простой учебник https://www.simplifiedcoding.net/picasso-android-tutorial-picasso-image-loader-library/

person user8994116    schedule 03.12.2017