Отображать изображение по умолчанию NetworkImageView без запроса сети

У меня есть ListView, отображающий вещи, многие из которых имеют иллюстративный образ, а некоторые из них этого не делают. ViewHolder использует NetworkImageView для отображения иллюстраций.

Проблема в том, что даже если установлено изображение по умолчанию, оно не будет отображаться до тех пор, пока не будет вызван setImageUrl (), который, в свою очередь, установит исходное растровое изображение представления равным null, если URL-адрес пуст. Если URL-адрес не пуст, он делает запрос. Это означает, что вы вынуждены делать сетевой запрос, даже если не существует допустимого сетевого URL-адреса, связанного с этим конкретным представлением, иначе вместо отображения изображения по умолчанию отображается пустое представление.

(Проблема отправлена: https://code.google.com/p/android/issues/detail?id=59538 )

Есть ли способ сделать ложные сетевые запросы для элементов без действительного URL-адреса?

Это отлично работает для меня:

String url = getURL(); NetworkImageView niv = (NetworkImageView)rootView.findViewById(R.id.niv); if(url.length() > 0) niv.setImageUrl(url, imageLoader); niv.setDefaultImageResId(R.drawable._default); niv.setErrorImageResId(R.drawable.error); 

Для NetworkImageView есть переменная, определенная как mDefaultImageId Вы можете использовать ее для определения ресурса образа по умолчанию

Вот как вы можете это сделать –

Создайте файл с именем attrs.xml , в котором будут помещены эти строки –

 <declare-styleable name="DefaultImageResId"> <attr name="default_image_resource" format="reference" /> </declare-styleable> 

Создайте класс с именем CustomNetworkImageView и используйте следующий код –

 import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import com.android.volley.toolbox.NetworkImageView; import com.myapp.R; public class CustomNetworkImageView extends NetworkImageView { public CustomNetworkImageView(Context context) { super(context); } public CustomNetworkImageView(Context context, AttributeSet attrs) { super(context, attrs); setDefaultImageResId(context, attrs); } public CustomNetworkImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setDefaultImageResId(context, attrs); } private void setDefaultImageResId(Context context, AttributeSet attrs) { TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.DefaultImageResId); int resId = typedArray.getResourceId(R.styleable.DefaultImageResId_default_image_resource, 0); if (0 != resId) setDefaultImageResId(resId); } } 

Теперь в вашем обычном формате XML-файл используйте вот так:

 <com.myapp.CustomNetworkImageView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/img" android:layout_width="match_parent" android:layout_height="wrap_content" app:default_image_resource="@drawable/defaultimage"/> 

Помните, что строка xmlns:app="http://schemas.android.com/apk/res-auto" очень важна в корневом элементе вашего файла макета. Затем добавьте app:default_image_resource

Вы сделали!!! Теперь вы можете даже упомянуть изображение из вашего xml

Возможно, вы можете попробовать андроид: background = "yourdrawable"

 <com.android.volley.toolbox.NetworkImageView android:id="@+id/puppy_imageView" android:layout_width="110dp" android:layout_height="110dp" android:scaleType="centerCrop" android:background="@drawable/drawablename" /> 

ОБНОВЛЕНИЕ ОТВЕТ

После того, как я попробую этот ответ, я полагаю, что новое изображение переопределит фон, чтобы его не удачный ответ

Согласно документации setDefaultImageResId может это сделать

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

Просто, когда вы определяете свой

 NetworkImageView _ImageView = (NetworkImageView) findViewById(R.id.imageview); _ImageView.setDefaultImageResId(R.drawable.yourdrawable); 

ImageView – это суперкласс, поэтому для его запуска используйте собственный метод setter:

 niv.setImageResource(R.drawable.icon_no_image_avail); // coerce NetworkImageView to draw itself initially. 
Intereting Posts
Xamarin.Forms XAML – Добавление собственных элементов управления Как объединить данные с помощью Android Volley Как загрузить несколько файлов с помощью android DownloadManager, чтобы он отображался в одной очереди Ошибка при запуске AVD. Файловая система уже составляет 140800 (4k) блоков – ничего не делать Android-эмулятор – ориентация экрана не работает должным образом Можно ли измерить, насколько далеко телефон перемещается по вертикали Проверить наличие скрытой сети Wi-Fi Вставка текста внутри edittext в android? Android, могу ли я поместить AsyncTask в отдельный класс и иметь обратный вызов? AndroidManifest в директории androidTest игнорируется Андроид, фоновый ресурс становится черным на ICS во время работы над KitKat Разница в WebView в Android 4.3 до 4.4 Настройка Google Cloud Messenging (GCM) с помощью простой службы уведомлений Amazon Web Services (AWS) (SNS) ViewPager в NestedScrollView Объединение переписей Java с точечным синтаксисом (enum.value1.value2)?