XListView的简单实现

//MainActivity界面
package com.bwei.xlistview.activity;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;

import com.bwei.xlistview.R;
import com.bwei.xlistview.adapter.MyAdapter;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.TextHttpResponseHandler;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import cz.msebera.android.httpclient.Header;
import xlistview.bawei.com.xlistviewlibrary.XListView;

public class MainActivity extends AppCompatActivity {


  //  private String url = "http://www.yulin520.com/a2a/forum/allTypeList?sign=376C5BFC22179A1B8FF3A86D4588B29F&pageSize=10&ts=1877785007&forumType=0&page=1";
    private int page=1;
    private XListView xlv;
    private JSONArray jsonArray = null;
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 0:
                    //停止下拉刷新
                    xlv.stopRefresh();
                    break;
                case 1:
                    //停止上拉加载
                    xlv.stopLoadMore();

                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找控件
        xlv = (XListView) findViewById(R.id.xlv);
        //设置下拉和上拉监听
        xlv.setPullRefreshEnable(true);
        xlv.setPullLoadEnable(true);
        xlv.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                Toast.makeText(MainActivity.this, "下拉刷新", Toast.LENGTH_SHORT).show();
                page=1;
                getServerData();
                handler.sendEmptyMessageDelayed(0,2000);
               /* handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        xlv.stopRefresh();
                    }
                },2000);*/


            }

            @Override
            public void onLoadMore() {
                Toast.makeText(MainActivity.this, "上拉加载", Toast.LENGTH_SHORT).show();
                page++;
                getServerData();
                handler.sendEmptyMessageDelayed(1,2000);
            }
        });
        //默认需要有一个
        getServerData();

    }

    private void getServerData() {
        String url = "http://www.yulin520.com/a2a/forum/allTypeList?sign=376C5BFC22179A1B8FF3A86D4588B29F&pageSize=10&ts=1877785007&forumType=0&page="+page;
        //创建网络请求
        AsyncHttpClient client = new AsyncHttpClient();
        client.get(this, url, new TextHttpResponseHandler() {
            @Override
            public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {

            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, String responseString) {
                Log.i("xxx", responseString);
                try {
                    JSONObject jsonObject = new JSONObject(responseString);
                    JSONArray datas = jsonObject.getJSONArray("data");
                    //page为1的时候创建集合
                    if (page==1){
                        jsonArray = new JSONArray();
                    }
                    //遍历累加
                    for (int i =0;i<datas.length();i++){
                        jsonArray.put(datas.get(i));
                    }

                    MyAdapter adapter = new MyAdapter(MainActivity.this, jsonArray);
                    xlv.setAdapter(adapter);

                } catch (JSONException e) {
                    e.printStackTrace();
                }


            }
        });
    }
}


//Adapter界面

package com.bwei.xlistview.adapter;

import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bwei.xlistview.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * 1. 类的用途
 * 2. @author forever
 * 3. @date 2018/7/12 17:40
 */


public class MyAdapter extends BaseAdapter {
    Context context;
    JSONArray datas;

    public MyAdapter(Context context, JSONArray datas) {
        this.context = context;
        this.datas = datas;
    }

    @Override
    public int getCount() {
        return datas.length();
    }

    @Override
    public Object getItem(int position) {
        try {
            return datas.get(position);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.item, null);
            holder = new ViewHolder();
            holder.iv = (ImageView) convertView.findViewById(R.id.iv);
            holder.tv_title = (TextView) convertView.findViewById(R.id.tv_title);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        try {
            JSONObject jsonObject = datas.getJSONObject(position);
            String title = jsonObject.getString("title");
            String headImg = jsonObject.getString("headImg");
            holder.tv_title.setText(title);
            //  DisplayImageOptions options = DisplayImageOptions.createSimple();

            DisplayImageOptions options = new DisplayImageOptions.Builder()
                    // 设置图片在下载期间显示的图片
                    .showImageOnLoading(R.mipmap.ic_launcher)
                    // 设置图片Uri为空或是错误的时候显示的图片
                    .showImageForEmptyUri(R.mipmap.ic_launcher)
                    // 设置图片加载/解码过程中错误时候显示的图片
                    .showImageOnFail(R.mipmap.ic_launcher)
                    // 设置下载的图片是否缓存在内存中
                    .cacheInMemory(true)
                    // 设置下载的图片是否缓存在SD卡中
                    .cacheOnDisc(true)
                    // 是否考虑JPEG图像EXIF参数(旋转,翻转)
                    .considerExifParams(true)
                    // 设置图片以如何的编码方式显示
                    .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
                    // 设置图片的解码类型//
                    .bitmapConfig(Bitmap.Config.RGB_565)
                    // 设置图片的解码配置
                    // .decodingOptions(options)
                    // .delayBeforeLoading(int delayInMillis)//int
                    // delayInMillis为你设置的下载前的延迟时间
                    // 设置图片加入缓存前,对bitmap进行设置
                    // .preProcessor(BitmapProcessor preProcessor)
                    // 设置图片在下载前是否重置,复位
                    .resetViewBeforeLoading(true)
                    // 是否设置为圆角,弧度为多少
                    .displayer(new RoundedBitmapDisplayer(100))
                    // 是否图片加载好后渐入的动画时间
                    //.displayer(new FadeInBitmapDisplayer(100))
                    // 构建完成
                    .build();
            //使用图片加载框架加载图片
            ImageLoader.getInstance().displayImage(headImg, holder.iv,options);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return convertView;
    }

    private class ViewHolder {
        ImageView iv;
        TextView tv_title;
    }
}

//MyApplication界面
package com.bwei.xlistview.app;

import android.app.Application;

import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.utils.StorageUtils;

import java.io.File;

/**
 * 1. 类的用途
 * 2. @author forever
 * 3. @date 2018/7/13 10:48
 */


public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //进行全局配置,并初始化
      //  ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);
        File diskCache = StorageUtils.getCacheDirectory(this);
        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
                // 设置内存图片的宽高
                .memoryCacheExtraOptions(480, 800)
                // default = device screen dimensions
                // 缓存到磁盘中的图片宽高
                .diskCacheExtraOptions(480, 800, null)
                // .taskExecutor(null)
                // .taskExecutorForCachedImages()
                .threadPoolSize(3)
                // default 线程优先级
                .threadPriority(Thread.NORM_PRIORITY - 2)
                // default
                .tasksProcessingOrder(QueueProcessingType.FIFO)
                // // default设置在内存中缓存图像的多种尺寸
                //加载同一URL图片时,imageView从小变大时,从内存缓存中加载
                .denyCacheImageMultipleSizesInMemory()
                // 超过设定的缓存大小时,内存缓存的清除机制
                .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
                // 内存的一个大小
                .memoryCacheSize(2 * 1024 * 1024)
                .memoryCacheSizePercentage(13)
                // default 将图片信息缓存到该路径下
                .diskCache(new UnlimitedDiscCache(diskCache))
                // default 磁盘缓存的大小
                .diskCacheSize(50 * 1024 * 1024)
                // 磁盘缓存文件的个数
                .diskCacheFileCount(100)
                //磁盘缓存的文件名的命名方式//一般使用默认值 (获取文件名称的hashcode然后转换成字符串)或MD5 new Md5FileNameGenerator()源文件的名称同过md5加密后保存
                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
                // 设置默认的图片加载
                .imageDownloader(
                        new BaseImageDownloader(getApplicationContext())) // default
                // 使用默认的图片解析器
                .imageDecoder(new BaseImageDecoder(true)) // default
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
                .writeDebugLogs().build();

        ImageLoader.getInstance().init(configuration);

    }
}





猜你喜欢

转载自blog.csdn.net/qq_42045179/article/details/81040183