Async+HttpUtils+imageLoasder实现xlistview

1.导包,加权限,关联imageloasder,创建布局

2.HttpUtils请求数据

package com.example.utils;
import android.os.AsyncTask;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Created by lenovo on 2018/7/15.
 */

public class HttpUtils {
    private gethttplisten gethttplisten;
    private static  HttpUtils httpUtils;
    //单例
    public  static  HttpUtils getinstance(){
        if(httpUtils==null){
            httpUtils =new HttpUtils();
        }
        return  httpUtils;
    }
    //创建方法
    public  void  getdata(String url){
        Myasync myasync = new Myasync();
        myasync.execute(url);
    }
    //创建方法继承async
    public  class  Myasync extends AsyncTask<String,Integer,String>{
     //耗时
        @Override
        protected String doInBackground(String... params) {
            //创建路径
            String path =params[0];
            //写入方法
            try {
                URL url = new URL(path);
                //网络请求
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
               //设置演示
                connection.setConnectTimeout(5000);
                //设置读取
                connection.setReadTimeout(5000);
                //设置请求方式
                connection.setRequestMethod("GET");
                //判断
                if(connection.getResponseCode()==200){
                    //创建输入流
                    InputStream inputStream = connection.getInputStream();
                    //创建输出流
                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
                    //创建数组
                    byte[] bytes = new byte[1024];
                    //创建长度
                    int len =0;
                    //遍历
                    while ((len=inputStream.read(bytes))!=-1){
                        //写入
                        bos.write(bytes,0,len);
                    }
                    //关流
                    inputStream.close();
                    bos.close();
                    //创建方法
                    String json = bos.toString();
                    return  json;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
        //更新ui
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            //接收
            gethttplisten.getjson(s);
        }
    }
    //创建接口
    public  interface  gethttplisten{
        //重写方法
        public  void  getjson(String json);
    }
    //向外调用接口
    public  void  sethttplisten(gethttplisten gethttplisten){
        this.gethttplisten =gethttplisten;
    }

}

3.设置ImageLoader请求

package com.example.app;

import android.app.Application;
import com.bwei.imageloaderlibrary.utils.ImageLoaderUtils;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

/**
 * Created by lenovo on 2018/7/15.
 */

public class imgageloader extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //创建请求
        ImageLoaderConfiguration configuration = ImageLoaderUtils.getConfiguration(this);
        ImageLoader.getInstance().init(configuration);

    }

}

4.Fragment与viewpager切换

package com.example.day04xlistview04;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.RadioGroup;
import com.example.adapter.myadapter;
import com.example.fragment.frag1;
import com.example.fragment.frag2;
import com.example.fragment.frag3;

import java.util.ArrayList;


public class MainActivity extends AppCompatActivity {

    private ViewPager viewpage;
    private RadioGroup rap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化
        viewpage = findViewById(R.id.viewpage);
        rap = findViewById(R.id.rap);
        //创建fragment
        //创建对象
        frag1 frag1 = new frag1();
        frag2 frag2 = new frag2();
        frag3 frag3 = new frag3();
        //创建集合
        ArrayList<Fragment> list = new ArrayList<>();
        //对象添加到集合中
        list.add(frag1);
        list.add(frag2);
        list.add(frag3);
        //创建适配器
        myadapter myadapter = new myadapter(getSupportFragmentManager(),list);
        viewpage.setAdapter(myadapter);
        //创建监听方法
        viewpage.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            @Override
            public void onPageSelected(int position) {
                rap.check(rap.getChildAt(position).getId());
            }

            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
        //按钮的点击事件
        rap.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                switch (i){
                    case R.id.rap1:
                        viewpage.setCurrentItem(0);
                        break;
                    case R.id.rap2:
                        viewpage.setCurrentItem(1);
                        break;
                    case R.id.rap3:
                        viewpage.setCurrentItem(2);
                        break;
                    default:
                        break;
                }
            }
        });
    }
}

5.Fragment的适配器

package com.example.adapter;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.List;

/**
 * Created by lenovo on 2018/7/15.
 */

public class myadapter extends FragmentPagerAdapter {
    private List<Fragment> list;

    public myadapter(FragmentManager fm, List<Fragment> list) {
        super(fm);
        this.list = list;
    }

    @Override
    public Fragment getItem(int position) {
        return list.get(position);
    }

    @Override
    public int getCount() {
        return list.size();

    }

}

6.Xlistview的适配器,包括(图片路径缓存,多条目)

package com.example.adapter;

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

import com.bwei.imageloaderlibrary.utils.ImageLoaderUtils;
import com.example.bean.news;
import com.example.day04xlistview04.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.List;

/**
 * Created by lenovo on 2018/7/15.
 */

public class my1adapter extends BaseAdapter {
    private Context context;
    private List<news.DataBean> list;
    private final  int one =0;
    private final  int two =1;
    public my1adapter(Context context, List<news.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @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 int getViewTypeCount() {
        return 2;
    }
    //类型
    @Override
    public int getItemViewType(int position) {
        String pic1 = list.get(position).getThumbnail_pic_s();
        String pic2 = list.get(position).getThumbnail_pic_s02();
        String pic3 = list.get(position).getThumbnail_pic_s03();
        if(pic1!=null&&pic2==null&&pic3==null){
            return one;
        }else  if(pic1!=null&&pic2!=null&&pic3!=null){
            return  two;
        }else {
            return  one;
        }
    }
    @Override
    public View getView(int i, View convertView, ViewGroup viewGroup) {
        //获取int值
        int itemViewType = getItemViewType(i);
        //判断
        if(itemViewType==0){
            //初始化
            viewholder h =null;
            if(convertView==null){
                convertView= View.inflate(context, R.layout.include1, null);
                h =new viewholder();
                h.title1 = convertView.findViewById(R.id.title1);
                h. img01 = convertView.findViewById(R.id.img01);
               convertView.setTag(h);
            }else {
                h = (viewholder) convertView.getTag();
            }
            h.title1.setText(list.get(i).getTitle());
            DisplayImageOptions options = ImageLoaderUtils.getOptions();
            ImageLoader.getInstance().displayImage(list.get(i).getThumbnail_pic_s(),h.img01,options);;
            return  convertView;


        }else  if(itemViewType==1){
            viewholder h =null;
            if(convertView==null){
                convertView= View.inflate(context, R.layout.include2, null);
                h =new viewholder();
                h.title2 = convertView.findViewById(R.id.title2);
                h. img02 = convertView.findViewById(R.id.img02);
                h. img03 = convertView.findViewById(R.id.img03);
                h. img04 = convertView.findViewById(R.id.img04);
                convertView.setTag(h);
            }else {
                h = (viewholder) convertView.getTag();
            }
            h.title2.setText(list.get(i).getTitle());
            ImageLoader.getInstance().displayImage(list.get(i).getThumbnail_pic_s(),h.img02);;
            ImageLoader.getInstance().displayImage(list.get(i).getThumbnail_pic_s02(),h.img03);;
            ImageLoader.getInstance().displayImage(list.get(i).getThumbnail_pic_s03(),h.img04);;
            return  convertView;
        }
        return null;
    }
    //优化
    public  class  viewholder {
        TextView title1;
        TextView title2;
        ImageView img01;
        ImageView img02;
        ImageView img03;
        ImageView img04;
    }

}

7.XListView, 包括(分页,Gson解析,接口回调)

package com.example.fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.adapter.my1adapter;
import com.example.bean.news;
import com.example.day04xlistview04.R;
import com.example.utils.HttpUtils;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
import view.XListView;

/**
 * Created by lenovo on 2018/7/15.
 */

public class frag1  extends Fragment{
    private my1adapter my1adapter;
    private XListView x_listview;
    private String path ="http://www.xieast.com/api/news/news.php?page=";
    private int page =1;
    private HttpUtils httpUtils = HttpUtils.getinstance();
    private List<com.example.bean.news.DataBean> list =new ArrayList<>();
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //创建布局
        View view = inflater.inflate(R.layout.frag1, container, false);
        x_listview = view.findViewById(R.id.x_listview);
        return  view;
    }
    //逻辑代码写在onactivitycreate中
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        getfromid();
        getfrondatanetwork();
    }

    private void getfromid() {
        //设置是否可以刷新
        x_listview.setPullRefreshEnable(true);
        //s设置是否可以加载
        x_listview.setPullLoadEnable(true);
        //设置监听事件
        x_listview.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                page =1;
                //调用网络
                getfrondatanetwork();
            }

            @Override
            public void onLoadMore() {
                page+=1;
                //调用网络
                getfrondatanetwork();
            }
        });
        //创建适配器
         my1adapter = new my1adapter(getActivity(),list);
        x_listview.setAdapter(my1adapter);
    }

    private void getfrondatanetwork() {
        String url =path+page;
        //设置路径
        httpUtils.getdata(url);
        //接口回调
        httpUtils.sethttplisten(new HttpUtils.gethttplisten() {
            @Override
            public void getjson(String json) {
                //解析
                Gson gson = new Gson();
                //解析内容
                news news = gson.fromJson(json, news.class);
                //获取指定的方法
                List<com.example.bean.news.DataBean> data = news.getData();
                if(page==1){
                    list.clear();
                }
                list.addAll(data);
                //刷新适配器
                my1adapter.notifyDataSetChanged();
                if(page==1){
                    //停止刷新
                    x_listview.stopRefresh();
                }else {
                    //停止加载
                    x_listview.stopLoadMore();
                }
            }
        });
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值