ListView相关使用,优化Day08
package com.example.ex_day_0611_day07_listview;
在华池等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供做网站、成都网站制作 网站设计制作定制网站建设,公司网站建设,企业网站建设,成都品牌网站建设,成都营销网站建设,成都外贸网站建设,华池网站建设费用合理。
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.security.PublicKey;
import java.util.HashMap;
import java.util.concurrent.Executor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends Activity {
HashMap
HashMap
HashMap
HashMap
private ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView)findViewById(R.id.listView1);
MyApapter myApapter = new MyApapter();
listview.setAdapter(myApapter);
}
class User
{
ImageView p_w_picpathview;
ProgressBar pb;
TextView tv;
Button button;
}
class MyApapter extends BaseAdapter
{
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
User user = new User();
LayoutInflater inflater = getLayoutInflater();
if(convertView==null)
{
view = inflater.inflate(R.layout.itmp, null);
user.p_w_picpathview = (ImageView)view.findViewById(R.id.p_w_picpathView1);
user.pb = (ProgressBar)view.findViewById(R.id.progressBar1);
user.button = (Button)view.findViewById(R.id.button1);
user.tv = (TextView)view.findViewById(R.id.textView1);
view.setTag(user);
}else
{
view = convertView;
user = (User)view.getTag();
}
//下载图片
//设置图片还未开始下载时的状态
user.p_w_picpathview.setImageResource(R.drawable.ic_launcher);
Bitmap bitmap = map.get(position);
if (bitmap==null)
{
MyAsyncTask myp_w_picpathview = new MyAsyncTask(user.p_w_picpathview,position,user.pb);
myp_w_picpathview.execute("http://192.168.56.1:8080/service/qq"+position+".png");
}else
{
user.p_w_picpathview.setImageBitmap(bitmap);
}
//实现按钮点击事件
final Button button1 = user.button;
final int pos = position;
final ProgressBar pb1 = user.pb;
final TextView tv = user.tv;
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
button1.setText("下载中");
button1.setEnabled(false);
MyAsyncTask2 myasyctask2 = new MyAsyncTask2(button1,pb1,tv,pos);
myapa.put(pos, myasyctask2);
myasyctask2.execute("http://192.168.56.1:8080/service/qq"+pos+".zip");
hashmap.put(pos, null);
}
});
MyAsyncTask2 task2 = myapa.get(pos);
ProgressBar pb2 = user.pb;
Button button2 = user.button;
TextView tv1 = user.tv;
//按钮点击事件中设置进度条。
//下文件
if(hashmap.get(position)==null)
{
button1.setText("下载");
button1.setEnabled(true);
user.tv.setText("==========");
pb1.setProgress(0);
}
else if(hashmap.get(position) == false)
{
button1.setText("下载中");
button1.setEnabled(false);
user.pb.setMax(myint.get(pos));
task2.setReplace(pb2,button2,tv1);
}else if(hashmap.get(position)==true)
{
button1.setText("下载完成");
button1.setEnabled(true);
user.tv.setText("==========");
pb1.setMax(100);
pb1.setProgress(100);
}
return view;
}
@Override
public int getCount() {
return 20;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
}
class MyAsyncTask2 extends AsyncTask
{
Button button1;
ProgressBar pb;
TextView tv;
int position;
public MyAsyncTask2(Button button1, ProgressBar pb,TextView tv,int position)
{
this.button1 = button1;
this.pb = pb;
this.tv = tv;
this.position = position;
}
public void setReplace(ProgressBar pb,Button button1,TextView tv)
{
this.pb = pb;
this.button1 = button1;
this.tv = tv;
}
@Override
protected String doInBackground(String... params) {
try {
URL url = new URL(params[0]);
URLConnection openConnection = url.openConnection();
int contentLength = openConnection.getContentLength();
myint.put(position, contentLength);
pb.setMax(contentLength);
InputStream inputStream = openConnection.getInputStream();
byte[] buffer = new byte[1024];
int sum = 0;
int len = 0 ;
hashmap.put(position, false);
while(-1 != (len = inputStream.read(buffer)))
{
sum += len;
Thread.sleep(100);
publishProgress(sum);
}
hashmap.put(position, true);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return "下载完成";
}
@Override
protected void onPostExecute(String result) {
button1.setText(result);
button1.setEnabled(true);
super.onPostExecute(result);
}
@Override
protected void onProgressUpdate(Integer... values) {
int fp = listview.getFirstVisiblePosition();
int lp = listview.getLastVisiblePosition();
if (position>=fp&&position <= lp) {
pb.setProgress(values[0]);
tv.setText((int)((double)values[0]/(double)pb.getMax()*100)+"%");
}
super.onProgressUpdate(values);
}
}
class MyAsyncTask extends AsyncTask
{
int position;
ImageView p_w_picpathview;
ProgressBar pb;
public MyAsyncTask(ImageView p_w_picpathview,int position,ProgressBar pb) {
this.p_w_picpathview = p_w_picpathview;
this.position = position;
this.pb = pb;
}
@Override
protected Bitmap doInBackground(String... params) {
Bitmap bitmap = null;
try {
URL url = new URL(params[0]);
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
//得到当前屏幕可见第一行
int fvb = listview.getFirstVisiblePosition();
int lvp = listview.getLastVisiblePosition();
if (position>=fvb&&position<=lvp)
{
p_w_picpathview.setImageBitmap(result);
}
map.put(position, result);
super.onPostExecute(result);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
当前文章:ListView相关使用,优化Day08
网页网址:http://myzitong.com/article/gediie.html