Android GridView适配器在SwipeRefreshLayout的Refesh上填充不正确
我的GridView适配器有一个问题-第一次加载可以正常工作,但是每次重新加载都会将第一个图像添加到空的grid view中,即使知道结果中只有一张照片 图片将有助于说明 因此,我怀疑我的GridAdapter没有正确处理数据,但不确定我遗漏了什么 这是我的onSuccess,它在AsyncHttpClient从API获取数据后调用适配器:Android GridView适配器在SwipeRefreshLayout的Refesh上填充不正确,android,gridview,baseadapter,asynchttpclient,Android,Gridview,Baseadapter,Asynchttpclient,我的GridView适配器有一个问题-第一次加载可以正常工作,但是每次重新加载都会将第一个图像添加到空的grid view中,即使知道结果中只有一张照片 图片将有助于说明 因此,我怀疑我的GridAdapter没有正确处理数据,但不确定我遗漏了什么 这是我的onSuccess,它在AsyncHttpClient从API获取数据后调用适配器: @Override public void onSuccess(JSONObject jsonObject) {
@Override
public void onSuccess(JSONObject jsonObject) {
swipeLayout.setRefreshing(false);
Toast.makeText(getApplicationContext(), "Success!", Toast.LENGTH_LONG).show();
JSONArray list = jsonObject.optJSONArray("photos");
for (int i = 0; i < list.length(); i++){
try {
photoUrlList.add(list.getJSONObject(i).getString("thumb_url"));
} catch (JSONException e) {
e.printStackTrace();
}
}
mFourGridAdapter.updateData(photoUrlList);
}
MyFourGridAdapter:
如果有什么不清楚的地方,请发表评论——这有点难以解释。非常感谢您的帮助。您正在呼叫photoUrlList.add加入您的onSuccess方法。这加上您的症状,表明您并不是在每次刷新操作中都从一个新列表开始,所以每次刷新时您都会将相同的URL附加到ArrayList。您完全正确-它使用了相同的ArrayList,只是添加到了它中-我将设置一个新的ArrayList放在我的onSuccess和jackpot之上。谢谢
private class MyFourGridAdapter extends BaseAdapter
{
private LayoutInflater inflater;
private List<String> photoUrlList;
public MyFourGridAdapter(Context context, List<String> photoUrlList ) {
inflater = LayoutInflater.from(context);
this.photoUrlList = photoUrlList;
}
public void updateData(List<String> values) {
// update the adapter's dataset
photoUrlList = values;
notifyDataSetChanged();
}
@Override
public int getCount() {
return photoUrlList.size();
}
@Override
public Object getItem(int i)
{
return photoUrlList.get(i);
}
@Override
public long getItemId(int i)
{
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View v = view;
ImageView picture;
if(v == null) {
v = inflater.inflate(R.layout.gridview_item, viewGroup, false);
v.setTag(R.id.frame_square_image_view, v.findViewById(R.id.frame_square_image_view));
}
picture = (ImageView)v.getTag(R.id.frame_square_image_view);
String photoUrl = photoUrlList.get(i);
Picasso.with(picture.getContext()).load(photoUrl).into(picture);
return v;
}
}