Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android GridView ArrayAdapter图像通过截击切换滚动_Java_Android_Android Gridview_Android Volley - Fatal编程技术网

Java Android GridView ArrayAdapter图像通过截击切换滚动

Java Android GridView ArrayAdapter图像通过截击切换滚动,java,android,android-gridview,android-volley,Java,Android,Android Gridview,Android Volley,因此,我有一个用于gridview的ArrayAdapter,它在从StringRequest获取图像位置后填充NetworkImageView。当我在网格中滚动时,每个项目的图像都会切换好几次,然后再选择正确的图像 我怀疑问题在于图像在StringRequest之后由imageLoader填充,并且网格项正在被重用,但是我认为NetworkImageView取消了以前的图像请求,这将阻止这种行为。 下面是我正在使用的代码-任何帮助都将不胜感激 @Override public View get

因此,我有一个用于gridview的ArrayAdapter,它在从StringRequest获取图像位置后填充NetworkImageView。当我在网格中滚动时,每个项目的图像都会切换好几次,然后再选择正确的图像

我怀疑问题在于图像在StringRequest之后由imageLoader填充,并且网格项正在被重用,但是我认为NetworkImageView取消了以前的图像请求,这将阻止这种行为。 下面是我正在使用的代码-任何帮助都将不胜感激

@Override
public View getView(final int position, View convertView, final ViewGroup parent) {

    final ViewHolder holder;
    View view = convertView;
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (view == null) {
        view = inflater.inflate(R.layout.gridrowlayout, parent, false);
        holder = new ViewHolder();
        assert view != null;
        holder.textView = (TextView) view.findViewById(R.id.label);
        holder.networkImageView = (MNetworkImageView) view.findViewById(R.id.icon);
        view.setTag(holder);
    } else {
        holder = (ViewHolder) view.getTag();
    }

    MyObject myObject = myObjects.get(position);
    String url = null;
    try {
        url = getUrl(myObject);
    } catch (EncoderException e) {
        e.printStackTrace();
    }
    holder.networkImageView.setDefaultImageResId(R.drawable.loading);
    holder.networkImageView.setErrorImageResId(R.drawable.no_image_available);
    holder.textView.setText(myObject.getName() + "\n " + myObject.getYear());
    if (MyApplication.getInstance().isNetworkAvailable()) {

        StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String json) {
                try {
                    Resp resp = gson.fromJson(json, Resp.class);
                    String tbUrl = resp.getPoster();
                    holder.networkImageView.setImageUrl(tbUrl, imageLoader);
                } catch (JsonSyntaxException e) {
                    Log.i(ImageAdapter.TAG, "status failed");
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.e("Error: ", error.getMessage());
            }
        });
        MyApplication.getInstance().addToRequestQueue(stringRequest, ImageAdapter.TAG);
    }
    return view;
}
@覆盖
公共视图getView(最终整型位置、视图转换视图、最终视图组父视图){
最终持票人;
视图=转换视图;
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
如果(视图==null){
视图=充气机。充气(R.layout.gridrowlayout,父级,false);
holder=新的ViewHolder();
断言视图!=null;
holder.textView=(textView)view.findViewById(R.id.label);
holder.networkImageView=(MNetworkImageView)view.findViewById(R.id.icon);
视图.设置标签(支架);
}否则{
holder=(ViewHolder)view.getTag();
}
MyObject MyObject=myObjects.get(位置);
字符串url=null;
试一试{
url=getUrl(myObject);
}捕获(e){
e、 printStackTrace();
}
holder.networkImageView.setDefaultImageResId(R.drawable.loading);
holder.networkImageView.setErrorImageResId(R.drawable.无可用图像);
holder.textView.setText(myObject.getName()+“\n”+myObject.getYear());
if(MyApplication.getInstance().isNetworkAvailable()){
StringRequest StringRequest=新的StringRequest(url,new Response.Listener()){
@凌驾
公共void onResponse(字符串json){
试一试{
Resp Resp=gson.fromJson(json,Resp.class);
字符串tbUrl=resp.getPoster();
holder.networkImageView.setImageUrl(tbUrl,imageLoader);
}捕获(JsonSyntaxException e){
Log.i(ImageAdapter.TAG,“状态失败”);
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
e(“Error:,Error.getMessage());
}
});
MyApplication.getInstance().addToRequestQueue(stringRequest,ImageAdapter.TAG);
}
返回视图;
}

更改设计模式,首先下载10个图像URL,然后调用notifydatasetchanged()。您通过发出两个请求来加载,我认为这对于gridview不是一个好主意,您必须稍微更改它,以便用户体验一次加载延迟。