【发布时间】:2014-02-11 22:01:52
【问题描述】:
我正在使用 AsyncTask 从网络上检索图片的 String[],效果很好。
问题是当我尝试加载GridView Adapter时,数据还没有到达。所以,此时的array 是null。在我实例化GridView 时,如何确保String[] 包含数据?
这里是onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample_grid_view);
Bundle extras = getIntent().getExtras();
if (extras != null) {
query = extras.getString("query");
}
new AsyncDownload().execute();
GridView gv = (GridView) findViewById(R.id.grid_view);
gv.setAdapter(new SampleGridViewAdapter(this));
gv.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getApplicationContext(), "You have touched picture number " + String.valueOf(position) , Toast.LENGTH_SHORT).show();
}
});
}
这里是Adapter(请看关于图片的评论)
final class SampleGridViewAdapter extends BaseAdapter {
private final Context context;
private final List<String> urls = new ArrayList<String>();
public SampleGridViewAdapter(Context context) {
this.context = context;
//In this line is where I call the images retrieved by the AsyncTask.
//After finishing and opening the activity again, the images will be there, and will load correctly.
Collections.addAll(urls, SampleGridViewActivity.returnImages());
Collections.shuffle(urls);
}
@Override public View getView(int position, View convertView, ViewGroup parent) {
SquaredImageView view = (SquaredImageView) convertView;
if (view == null) {
view = new SquaredImageView(context);
view.setScaleType(CENTER_CROP);
}
// Get the image URL for the current position.
String url = getItem(position);
// Trigger the download of the URL asynchronously into the image view.
Picasso.with(context) //
.load(url) //
.placeholder(R.drawable.placeholder) //
.error(R.drawable.error) //
.fit() //
.into(view);
return view;
}
@Override public int getCount() {
return urls.size();
}
@Override public String getItem(int position) {
return urls.get(position);
}
@Override public long getItemId(int position) {
return position;
}
}
谢谢
【问题讨论】:
标签: android gridview android-asynctask