android 模拟listview多线程下载进度条显示不干扰

闲来没事写了个模拟下载进度条显示的demo,点击开始下载,然后进度逐渐增加。代码如下:

TestActivity.java如下

package test.demo.com;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.ProgressBar;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;

/**
 * Created by Administrator on 2016/1/15.
 */
public class TestActivity extends Activity {
    private ListView lv;
    private TestAdapter mAdapter;
    private Map map;
    private Map progress;
    private List positionList;

    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView (R.layout.activity_test);
        lv = (ListView) findViewById (R.id.text_lv);
        List test = new ArrayList<> ();
        test.add (1);
        test.add (1);
        test.add (1);
        test.add (1);
        map = new HashMap<> ();
        progress = new HashMap<> ();
        positionList = new ArrayList<> ();
        mAdapter = new TestAdapter (this, test, R.layout.item_test, new TestAdapter.myOnClick () {
            @Override
            void myclick (View v, Integer position) {
                map.put (position, (ProgressBar) v);
                progress.put (position, 0);
                positionList.add (position);
                start ();
            }
        });
        lv.setAdapter (mAdapter);
    }

    private void start () {
        new Timer ().schedule (new TimerTask () {
            @Override
            public void run () {
                for (Integer item : positionList) {
                    map.get (item).setProgress (progress.get (item));
                    progress.put (item, progress.get (item) + 5);
                }
            }
        }, 1000, 1000 * 5);
    }

}

adapter如下:


package test.demo.com;

import android.content.Context;
import android.view.View;

import java.util.List;

/**
 * Created by Administrator on 2016/1/15.
 */
public class TestAdapter extends MyBaseAdapter {
    public TestAdapter (Context context, List datas, int layoutId, myOnClick onClick) {
        super (context, datas, layoutId);
        this.onClick = onClick;
    }

    private myOnClick onClick;

    @Override
    public void convert (ViewHolder holder, Integer integer) {
        holder.getView (R.id.item_test_pb).setOnClickListener (onClick);
        holder.getView (R.id.item_test_pb).setTag (position);
    }


    public static abstract class myOnClick implements View.OnClickListener {
        @Override
        public void onClick (View v) {
            myclick (v, (Integer) v.getTag ());
        }

        abstract void myclick (View v, Integer position);
    }
}
下面是布局文件:




    




    

代码不多,很简单啦。

效果就是下图那样啦

android 模拟listview多线程下载进度条显示不干扰_第1张图片



你可能感兴趣的:(android,进度条)