通过hander展示XListView多条目加载

MainActivity里面是一个ViewPager联动

public class MainActivity extends FragmentActivity {

    private RadioGroup radio;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找控件
        final ViewPager pager= findViewById(R.id.pager);
        radio = findViewById(R.id.radio);
        //设置第一个默认
        radio.check(radio.getChildAt(0).getId());
        //集合
        ArrayList<Fragment> arr=new ArrayList<Fragment>();
        arr.add(new FragList());
        arr.add(new FragGrid());
        //适配器
        pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager(),arr));
        pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {

            }

            @Override
            public void onPageSelected(int i) {
                radio.check(radio.getChildAt(i).getId());
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });
        radio.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                switch (i){
                    case R.id.radio1:
                        pager.setCurrentItem(0);
                        break;
                    case R.id.radio2:
                        pager.setCurrentItem(1);
                        break;
                }
            }
        });
    }
}

ViewPager的适配器

public class MyPagerAdapter extends FragmentPagerAdapter {
    private ArrayList<Fragment> arr;
    public MyPagerAdapter(FragmentManager fm, ArrayList<Fragment> arr) {
        super(fm);
        this.arr=arr;
    }

    @Override
    public Fragment getItem(int i) {
        return arr.get(i);
    }

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

Http里面写个方法,方便调用


public class Http {
    public static String isquest(String strUrl){
        try {
            //设置url
            URL url=new URL(strUrl);
            HttpURLConnection connection= (HttpURLConnection) url.openConnection();
            //设置请求方式
            connection.setRequestMethod("GET");
            //设置读取时间
            connection.setReadTimeout(5000);
            //设置连接超时时间
            connection.setConnectTimeout(5000);
            //获取请求码
            int code = connection.getResponseCode();
            if(code==200){
                //得到数据
                InputStream stream = connection.getInputStream();
                BufferedReader reader=new BufferedReader(new InputStreamReader(stream,"utf-8"));
                //拼接字符串
                StringBuilder builder=new StringBuilder();
                String str="";
                //读取字符串
                while ((str=reader.readLine())!=null){
                    builder.append(str);
                }
                //返回字符串
                return  builder.toString();
            }
            //关闭连接
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return  null;
    }
}

主要代码来了,listView多条目加载


public class FragList extends Fragment {

    private XListView xListView;
    private MyListAdapter adapter;
    private ArrayList<Datas> datas;
    private String str="http://www.xieast.com/api/news/news.php?page=1";

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frag_list, container, false);
        //找控件
        xListView = view.findViewById(R.id.xlistv);
        //启用(true)禁用(false)上拉加载
        xListView.setPullLoadEnable(true);
        //注册XListViewListener接口
        xListView.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                new Thread(){
                    @Override
                    public void run() {
                        super.run();
                        String get = Http.isquest(str);
                        //解析
                        Gson gson=new Gson();
                        JsonBean bean = gson.fromJson(get, JsonBean.class);
                        ArrayList<Datas> da = bean.getData();
                        Message message2=new Message();
                        message2.what=1;
                        message2.obj=da;
                        handler.sendMessage(message2);
                    }
                }.start();

            }

            @Override
            public void onLoadMore() {
                new Thread(){
                    @Override
                    public void run() {
                        super.run();
                        String get = Http.isquest(str);
                        Gson gson=new Gson();
                        JsonBean bean = gson.fromJson(get, JsonBean.class);
                        ArrayList<Datas> dat = bean.getData();
                        Message message1=new Message();
                        message1.what=2;
                        message1.obj=dat;
                        handler.sendMessage(message1);
                    }
                }.start();


            }
        });

        new Thread(){
            @Override
            public void run() {
                super.run();
                String s = Http.isquest(str);
                Gson gson=new Gson();
                JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                ArrayList<Datas> data = jsonBean.getData();
                Message message=new Message();
                message.what=0;
                message.obj=data;
                handler.sendMessage(message);
            }
        }.start();

        return view;
    }
    private void onLoad(){
        //停止加载更多,重置头视图
        xListView.stopRefresh();
        //停止加载更多,重置脚视图
        xListView.stopLoadMore();
        //设置刷新时间
        xListView.setRefreshTime("刚刚刷新了");
    }
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 0:
                    datas = (ArrayList<Datas>) msg.obj;
                    adapter = new MyListAdapter(getActivity(),datas);
                    xListView.setAdapter(adapter);
                    break;
                case 1:

                    xListView.setAdapter(adapter);
                    onLoad();
                    break;
                case 2:
                    ArrayList<Datas> dataa= (ArrayList<Datas>) msg.obj;
                    datas.addAll(dataa);
                    adapter.notifyDataSetChanged();
                    onLoad();
                    break;
            }
        }
    };
}

image-loader加载图片用的:

//继承Application
public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        DisplayImageOptions options=new DisplayImageOptions.Builder()
                // 正在加载时显示的占位图
                .showImageOnLoading(R.mipmap.zhan)
                // 加载失败时显示的占位图
                .showImageOnFail(R.mipmap.shibai)
                //设置圆形
                .displayer(new CircleBitmapDisplayer())
                // bitmap的质量,默认为ARGB_8888
                .bitmapConfig(Bitmap.Config.ARGB_8888)
                .build();
        ImageLoaderConfiguration loaderConfiguration=new ImageLoaderConfiguration.Builder(this)
                //把我们写的设置添加到构建中
                .defaultDisplayImageOptions(options)
               .memoryCacheExtraOptions(200, 200)//配置内存缓存图片的尺寸
                .memoryCacheSize(2 * 1024 * 1024)//配置内存缓存的大小
                .threadPoolSize(3)//配置加载图片的线程数
                .threadPriority(1000)//配置线程的优先级
                .diskCache(new UnlimitedDiskCache(file))//UnlimitedDiskCache 限制这个图片的缓存路径
                .diskCacheFileCount(50)//配置sdcard缓存文件的数量
                //MD5这种方式生成缓存文件的名字
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())
                .diskCacheSize(50 * 1024 * 1024)//在sdcard缓存50MB
                .build();//完成
        //获得实例
        ImageLoader imageLoader=ImageLoader.getInstance();
        //初始化
        imageLoader.init(loaderConfiguration);
    }
}

在这里插入图片描述
还可以设置成圆角图形,只需要换行代码就完事!

 .displayer(new RoundedBitmapDisplayer(60))

在这里插入图片描述
xlistView多条目加载的适配器,我这个适配器加载了三个视图

public class MyListAdapter extends BaseAdapter {
    private Context con;
    private ArrayList<Datas> arr;

    public MyListAdapter(Context con, ArrayList<Datas> arr) {
        this.con = con;
        this.arr = arr;
    }

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

    @Override
    public Object getItem(int i) {
        return null;
    }

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

    @Override
    public int getViewTypeCount() {//视图个数
        return 3;
    }

    @Override
    public int getItemViewType(int position) {
        return position % 3;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        switch (getItemViewType(i)){
            case 0:
                ViewHolder0 vh;
                if(view==null){
                    view=LayoutInflater.from(con).inflate(R.layout.item1,null);
                    vh=new ViewHolder0();
                    vh.img=view.findViewById(R.id.img);
                    vh.tit=view.findViewById(R.id.tit);
                    view.setTag(vh);
                }else{
                    vh= (ViewHolder0) view.getTag();
                }
                vh.tit.setText(arr.get(i).getTitle());
                ImageLoader.getInstance().displayImage(arr.get(i).getThumbnail_pic_s(),vh.img);
                break;
            case 1:
                ViewHolder1 vh1;
                if(view==null){
                    view=LayoutInflater.from(con).inflate(R.layout.item2,null);
                    vh1=new ViewHolder1();
                    vh1.img=view.findViewById(R.id.img);
                    vh1.tit=view.findViewById(R.id.tit);
                    view.setTag(vh1);
                }else{
                    vh1= (ViewHolder1) view.getTag();
                }
                vh1.tit.setText(arr.get(i).getTitle());
                ImageLoader.getInstance().displayImage(arr.get(i).getThumbnail_pic_s(),vh1.img);
                break;
            case 2:
                ViewHolder2 vh2;
                if(view==null){
                    view=LayoutInflater.from(con).inflate(R.layout.item3,null);
                    vh2=new ViewHolder2();
                    vh2.img=view.findViewById(R.id.img);
                    vh2.tit=view.findViewById(R.id.tit);
                    vh2.name=view.findViewById(R.id.name);
                    view.setTag(vh2);
                }else{
                    vh2= (ViewHolder2) view.getTag();
                }
                vh2.tit.setText(arr.get(i).getTitle());
                vh2.name.setText(arr.get(i).getAuthor_name());
                ImageLoader.getInstance().displayImage(arr.get(i).getThumbnail_pic_s(),vh2.img);
                break;
        }
        return view;
    }
    static class ViewHolder0{
        ImageView img;
        TextView tit;
    }
    static class ViewHolder1{
        ImageView img;
        TextView tit;
    }
    static class ViewHolder2{
        ImageView img;
        TextView tit,name;
    }
}

给大家发一个背景选择器(为了好看)

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <color android:color="#f00"/>
    </item>
    <item android:state_checked="false">
        <color android:color="#fff"/>
    </item>
</selector>

记住在注册清单里面写

网络权限

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值