私は物事を表示するListViewを持っていますが、その多くには説明用の画像があり、一部にはありません。 ViewHolderはNetworkImageViewを使用してイラストを表示します。
問題は、デフォルトの画像が設定されていても、setImageUrl()を呼び出すまで表示されないことです RLが空の場合はビューのソースビットマップがnullに設定されます 。 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から画像に言及することもできます
android: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これを行うことができます
ロードの試行が完了するまで、このビューに使用されるデフォルトの画像リソースIDを設定します。
単にあなたがあなたを定義するとき
NetworkImageView _ImageView = (NetworkImageView) findViewById(R.id.imageview);
_ImageView.setDefaultImageResId(R.drawable.yourdrawable);
ImageView
はスーパークラスなので、独自のセッターメソッドを使用して開始します。
niv.setImageResource(R.drawable.icon_no_image_avail); // coerce NetworkImageView to draw itself initially.