- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想在微调器的文本旁边显示从网络(使用 google volley)加载的图像,但由于某种原因它没有显示。事实上,适配器的 getView 方法被 Android SDK 内部的一些测量方法一遍又一遍地调用,convertView 等于 null。
这是我的适配器的样子:
public class CategoriesSpinnerAdapter extends ArrayAdapter<Category> {
private LayoutInflater mLayoutInflater;
public CategoriesSpinnerAdapter(Context context, List<Category> objects) {
super(context, 0, objects);
mLayoutInflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = mLayoutInflater.inflate(R.layout.item_spinner_category, parent, false);
}
final TextView categoryTitle = (TextView) convertView.findViewById(R.id.scategory_title);
categoryTitle.setText(getItem(position).getName());
final NetworkImageView categoryImage = (NetworkImageView) convertView.findViewById(R.id.scategory_image);
ImageUtils.load(categoryImage, getItem(position).getIcon());
return convertView;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = mLayoutInflater.inflate(R.layout.simple_spinner_category, parent, false);
}
final TextView categoryTitle = (TextView) convertView.findViewById(R.id.spinner_item_title);
categoryTitle.setText(getItem(position).getName());
final NetworkImageView categoryImage = (NetworkImageView) convertView.findViewById(R.id.spinner_item_image);
ImageUtils.load(categoryImage, getItem(position).getIcon());
return convertView;
}
}
item_spinner_category.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:background="@drawable/top_bar_select_icon" />
<TextView
android:id="@+id/scategory_title"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_centerInParent="true"
android:textColor="@android:color/white" />
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/scategory_image"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_alignParentRight="true"
android:layout_marginRight="3dp"
android:layout_centerVertical="true"
android:src="@drawable/spinner_games_icon"/>
</RelativeLayout>
simple_spinner_category.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinner_item_title"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:textSize="14sp"
android:gravity="center"
android:textColor="@android:color/white"
android:background="@drawable/bottom_button_selector"/>
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/spinner_item_image"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_alignParentRight="true"
android:layout_marginRight="3dp"
android:layout_centerVertical="true" />
</RelativeLayout>
R.id.scategory_image 的静态图像会显示一小段时间,可能会持续到 Volley 下载网络图像。getDropDownView 表现良好,图像显示在下拉 View 中文本的旁边,但这似乎不会发生在主视图中。
知道这里会发生什么吗?
最佳答案
今天我遇到了同样的问题。由于没有答案,我想分享我的答案,希望对某人有所帮助。
查看 NetworkImageView源代码,我发现“问题”在这里:
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
loadImageIfNecessary(true);
}
所以,只是因为我不想碰这个很棒的框架,所以我创建了一个自定义此方法的 SpinnerNetworkImageView
(从原始 NewtworkImageView 复制并粘贴):
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
loadImageIfNecessary(false); // <-- look @ 'false'
}
现在一切正常。
另一种方法是使用普通的 ImageView 并在您的适配器中执行 ImageRequest:
Response.ErrorListener errorListener = ...
Response.Listener<Bitmap> listener = new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
holder.picture.setImageBitmap(bitmap);
}
};
ImageRequest req = new ImageRequest(
url, listener, width, height, Config.ARGB_8888, errorListener);
requestQueue.add(request);
但我选择了第一种方案。
关于android - Volley 的 NetworkImageView 没有出现在 Spinner 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20141965/
我目前正在测试 Volley 库。但是当请求失败 (404) 时,它不会再次执行,或者至少没有错误。但是缺少数据。如果请求失败,这是重试请求的正确方法吗? 提前致谢 req.setRetryPolic
我是新来从事Volley和缓存工作的:P。尽管我已经看过许多与Volley进行图像缓存有关的文章和帖子,但是我仍然不清楚采用Volley进行图像缓存的最佳/首选方式。像磁盘缓存还是内存? Volley
我想使用 Volley 从我的 Android 应用发送请求。 我已经把它包含在 build.gradle 中了 dependencies { ... compile 'com.andr
我的目标是从另一个类调用 Volley,这是一种非常简洁、模块化的方式,即: VolleyListener newListener = new VolleyListener()
我的代码是: class MyService extends Service{ public void onCreate(){ new ImageLoader(mReque
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我需要帮助来解决 Volley 库错误。我已使用 nodejs api 向服务器发送一些凭据以进行用户注册。在成功的情况下,当我的所有凭据对于创建新用户帐户都是唯一的时,它会向我显示所有响应等的所有内
我正在尝试完善我的应用程序中的错误处理,但我找不到 Volley 触发某些错误的集中位置以及原因。例如,我想知道如果我的请求的状态代码是 500 或更大,它肯定会触发 ServerError,但我似乎
当我在调试器中运行该方法时,数据按预期显示,但是每当我尝试使用它执行任何操作时,parentObject 的值都会返回为 null。 我只是想从服务器获取响应并将其存储为 JSONObject 以便在
我正在使用 Android Volley 缓存请求,这在我使用 GET 时工作正常,但由于某些原因我改用 POST。现在我想用不同的 POST 数据缓存相同的 URL。 请求 1 -> URL1,PO
我的情况是使用 Android-volley至 POST我的 json 对象,我可以成功发布所有内容,我的数据在服务器中可见,但服务器响应为 String不像 json ,这就是出现错误的原因。 co
我正在使用 volley 从 REST api 解析电影详细信息,并将解析的数据保存在名为 detailsMovies 的对象数组列表中。但是我无法在 onResponse 方法之外访问 ArrayL
我想知道如何解决这个问题。已完成代码的研究和替换,但问题仍然存在。 这是我使用 volley 的代码。 private void Regist(){ loading.setVisibility
如何创建一个单独的类,在其中定义所有关于 volley在另一个 Activity 中,我们直接传递 URL、CONTEXT 和 Get Response... 最佳答案 首先在Activity中创建回
我正在使用 volley 库并以 XML 格式获取响应。我想知道我们如何使用/volley 库解析响应。谢谢。 最佳答案 StringRequest req = new StringReque
当我在android studio中搜索 Volley 时,同时获取com.mcxiaoke.volley:library:1.0.19和com.mcxiaoke.volley:library-aar
我是 volley 和 android 的新手,我已经用 gradle 安装了 volley 并做了与官方教程相同的操作。但是没有响应,这意味着 Errorlistener 和 Responselis
当我在 Volley 中发出请求时,我收到 com.android.volley.ServerError 和响应代码 400。 我正在做这样的事情(通用示例代码): final String para
我引用了http://www.androidhive.info/2016/02/android-push-notifications-using-gcm-php-mysql-realtime-chat
当我将以下行添加到依赖项的 build.gradle 行时,Android Studio 显示此错误消息:compile 'com.android.volley:volley:1.0.0' apply
我是一名优秀的程序员,十分优秀!