Intereting Posts
Ссылка (чистый java) проект в проекте Android (не удалось найти класс) Android, текст / шрифт отображается как квадраты Обои для Android, сделанные неправильно Java.lang.IllegalAccessError: метод 'void android.support.v4.content Android Studio Gradle BuildTools Revision Почему методы жизненного цикла в классе активности определены с помощью спецификатора защищенного доступа Как использовать SearchView из темной темы в теме Light Appcompat Intellij Navigate> Class … исключить определенные файлы Android fragment addToBackStack (null): как добавить один и тот же фрагмент в стек всего один раз? Как не нарисовать нулевые значения в строке, показывая их значения оси X на MPAndroidChart? Android Webview Image Render to Center вместо верхнего левого угла Android, как отображать 2 списка в одном действии один за другим Android: запись и воспроизведение видео в том же SurfaceView HTTP-запросы с HttpClient слишком медленные? Как заставить показывать и скрывать виртуальную клавиатуру, если аппаратная клавиатура недоступна?

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