Intereting Posts
Файл Read Assets как строка Ожидание открытия ящика навигации перед инициализацией Фрагменты с пустым циклом while В Кордове, как я могу указать разные имена пакетов для ios и android? Случайное исключение NullPointerException в SoundManager Отключение аппаратного ускорения для mapView приводит к постоянному перерисовке Разработка с помощью LibVLC для Android в Windows Как получить Missed call & SMS count HttpURLConnection отправляет запрос JSON POST на Apache / PHP Избегайте растрового изображения из переработанного андроида Android onActivityResult запускается до начала активности! Как я могу сделать мой EditText пятью строками выше, не используя андроид: inputType = "textMultiLine"? WebView с встроенным инсталляционным запуском Controls Исключения и сбой При отмене соединения с сервером bluetooth перед принятием, весь процесс умирает. Зачем? Как кэшировать данные Json в автономном режиме? Как создать полезную всплывающую подсказку в Android

Отображать изображение по умолчанию 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.