上拉加载和下拉刷新(XListView)


首先添加权限和依赖:联网权限,Gosn依赖和ImageLoader依赖。上拉加载和下拉刷新需要XListView这个需要从github官网下载并封装一个Library然后添加到依赖里


上述弄好之后创建一个类继承APPlication

import android.app.Application;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

//创建一个类继承Application
public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //初始化ImageLoader框架:链式开发
        ImageLoaderConfiguration configuration= new ImageLoaderConfiguration.Builder(this).build();
        //给ImageLoader配置参数
        ImageLoader.getInstance().init(configuration);
    }
}

在MainActivity里实现XListView.(你自己封装的Library)它会重写两个方法分别是onRefresh()[下拉刷新方法]和onLoadMore()[上拉加载方法]

import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.bwie.xlistviewlibrary.View.XListView;
import com.example.think.myapplication.JAVABean.JAVABean;
import com.example.think.myapplication.Utils.Utils;
import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener{

    private XListView xlv;
    String uriString="https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=1";
   List<JAVABean.NewslistBean> list=new ArrayList<>();
    private MyAdapter my;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找到控件
        xlv = (XListView)findViewById(R.id.lv);
        //调用网络判断
        int netPyte = Utils.getNetPyte(this);
        if (netPyte==1) {
            Toast.makeText(MainActivity.this,"当前正在使用WiFi网络",Toast.LENGTH_LONG).show();
            //添加适配器
            my = new MyAdapter();
            xlv.setAdapter(my);
            //调用异步加载方法
            initAsy();
            //让XListView有上拉加载的功能
            xlv.setPullLoadEnable(true);
            //接口回掉要把实现类设置进去
            xlv.setXListViewListener(this);
        }if (netPyte==0){

        }
    }
    //异步加载方法
    public void initAsy(){
    new MyAsyncTask().execute(uriString);
    }

    //异步加载类
    public class MyAsyncTask extends AsyncTask<String,Void,String>{
        //子线程
        @Override
        protected String doInBackground(String... strings) {
            String string = strings[0];
            String str = Utils.NetJson(string);
            return str;
        }
        //主线程
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            //实例化Gson
            Gson gson = new Gson();
            //把Josn文件封装成JAVA对象
            JAVABean javaBean = gson.fromJson(s, JAVABean.class);
            //通过JAVA对象获取值
            List<JAVABean.NewslistBean> newslist = javaBean.getNewslist();
            //把一个集合添加到另一个集合中
            list.addAll(newslist);
            //刷新ListView页面
            my.notifyDataSetChanged();
            // 让刷新头 或者刷新底部ui返回;
            stop();
        }
    }
    //下拉刷新
    @Override
    public void onRefresh() {
        //清除数据
        //list.clear();
        //调用异步加载方法
        initAsy();

    }
    //上拉加载
    @Override
    public void onLoadMore() {
        //调用异步加载方法
        initAsy();
    }

  // 让刷新头 或者刷新底部ui返回;
public void stop(){ xlv.stopLoadMore();//停止上拉加载更多 xlv.stopRefresh();//停止刷新 xlv.setRefreshTime("刚刚"); } //适配器类 class MyAdapter extends BaseAdapter{ @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return i; } //返回视图 @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHadler vh=null; //优化 if (view == null) { //实例化ViewHadler vh=new ViewHadler(); //把布局文件转成View view = View.inflate(MainActivity.this, R.layout.activity, null); //找到控件 vh.tv=view.findViewById(R.id.tv); vh.im=view.findViewById(R.id.im); //把ViewHadler放到容器里 view.setTag(vh); }else { //从容器里取出 vh = (ViewHadler)view.getTag(); } //赋值 vh.tv.setText(list.get(i).getTitle()); //调用图片异步加载 new MyBitmap(vh.im).execute(list.get(i).getPicUrl()); return view; } }
//优化
 public class ViewHadler{ TextView tv; ImageView im; } //图片异步加载类 private class MyBitmap extends AsyncTask<String,Void,String>{ ImageView im; public MyBitmap(ImageView im) { this.im=im; } //子线程 @Override protected String doInBackground(String... strings) { String string = strings[0]; return string; } //主线程 @Override protected void onPostExecute(String s) { super.onPostExecute(s); ImageLoader.getInstance().displayImage(s,im); } }}

下面的都是工具类:

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class Utils {
    //Json解析方法
    public static String NetJson(String uriStrng){
        try {
            //URL对象封装接口字符串
            URL url=new URL(uriStrng);
            //用URL打开连接,返回HttpConnection
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            //设置超时时间
            urlConnection.setConnectTimeout(8000);
            //获取状态码
            int responseCode = urlConnection.getResponseCode();
            if (responseCode == 200) {
                //通过HttpURLConnection获取字节流
                InputStream inputStream = urlConnection.getInputStream();
                //把字节流转成缓冲字符流
                BufferedReader br=new BufferedReader(new InputStreamReader(inputStream));
                //获取StringBuilder
                StringBuilder sb=new StringBuilder();
                //变量
                String st="";
                while ((st=br.readLine())!=null){
                    sb.append(st);
                }
                return sb.toString();
            }else {

            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return "";
    }
    //图片解析方法
    public static Bitmap NetBitmap(String uriString) {
        try {
            //通过URL对象封装接口字符串
            URL url = new URL(uriString);
            //用URL打开链接
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            //设置链接超时时间
            urlConnection.setConnectTimeout(8000);
            //获取状态码
            int responseCode = urlConnection.getResponseCode();
            //判断状态码
            if (responseCode == 200) {
                //通过HttpURLConnection获取字节流
                InputStream inputStream = urlConnection.getInputStream();
                //通过图片工具类加工图片
                Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                return bitmap;//返回图片
            } else {

            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    //判断是否有网络方法
    public static int getNetPyte(Context context){
        //变量
        int mState=-1;//-1没有网络
        //获取ConnectivityManager
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        //获取网络连接的信息
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        //判断是否有网络
        if (activeNetworkInfo == null) {
            return mState;
        }
        //获取网络状态
        int type = activeNetworkInfo.getType();
        //判断是否是蜂窝网络
        if (type == ConnectivityManager.TYPE_MOBILE) {
            mState=0;
        }else if (type == ConnectivityManager.TYPE_WIFI) {//判断是否是wifi网络
            mState=1;
        }
        return mState;
    }

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值