温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ListView 相关使用,优化 Day08

发布时间:2020-08-05 15:41:57 来源:网络 阅读:346 作者:无心小书童 栏目:移动开发

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<Integer,Bitmap> map = new HashMap<Integer,Bitmap>();

HashMap<Integer,Boolean> hashmap = new HashMap<Integer,Boolean>();

HashMap<Integer,MyAsyncTask2> myapa = new HashMap<Integer,MyAsyncTask2>();

HashMap<Integer,Integer> myint = new HashMap<Integer,Integer>();

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<String, Integer, String>

 {

        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<String, Void, Bitmap>

 {

        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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI