加入访问网络和读取,写入sdcard的权限。
[java] view plain copy
接下来,我们来看看MainActivity.java。性能考虑,我们使用convertView和ViewHolder来重用控件。这里涉及到比较关键的一步,我们会在getView的时候给ViewHolder中的ImageView设置tag,其值为要放置在该ImageView上的图片的url地址。这个tag很重要,在异步下载图片完成回调的方法中,我们使用findViewWithTag(String url)来找到ListView中对应的ImagView,然后给该ImageView设置图片即可。其他的就是设置adapter的一般操作了。
[java] view plain copy
-
public class MainActivity extends Activity {
-
ListView mListView;
-
ImageDownloader mDownloader;
-
MyListAdapter myListAdapter;
-
private static final String TAG = “MainActivity”;
-
int m_flag = 0;
-
private static final String[] URLS = {
-
//图片地址就不贴了,自己去这篇帖子中找吧:http://www.cnblogs.com/liongname/articles/2345087.html
-
//其中有几张图片访问不了。
-
};
-
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
Util.flag = 0;
-
mListView = (ListView) findViewById(R.id.listview);
-
myListAdapter = new MyListAdapter();
-
mListView.setAdapter(myListAdapter);
-
}
-
private class MyListAdapter extends BaseAdapter {
-
private ViewHolder mHolder;
-
@Override
-
public int getCount() {
-
return URLS.length;
-
}
-
@Override
-
public Object getItem(int position) {
-
return URLS[position];
-
}
-
@Override
-
public long getItemId(int position) {
-
return position;
-
}
-
@Override
-
public View getView(int position, View convertView, ViewGroup parent) {
-
//只有当convertView不存在的时候才去inflate子元素
-
if (convertView == null) {
-
convertView = getLayoutInflater().inflate(R.layout.single_data,
-
null);
-
mHolder = new ViewHolder();
-
mHolder.mImageView = (ImageView) convertView.findViewById(R.id.image_view);
-
mHolder.mTextView = (TextView) convertView.findViewById(R.id.text_view);
-
convertView.setTag(mHolder);
-
}else {
-
mHolder = (ViewHolder) convertView.getTag();
-
}
-
final String url = URLS[position];
-
mHolder.mTextView.setText(url != null ? url.substring(url.lastIndexOf("/") + 1) : “”);
-
mHolder.mImageView.setTag(URLS[position]);
-
if (mDownloader == null) {
-
mDownloader = new ImageDownloader();</