XlistView的上拉加载下拉刷新

主Activity
public class MainActivity extends AppCompatActivity {
   ViewPager vp;
    List<Fragment>list;
    RadioGroup rg;
    RadioButton rb1,rb2,rb3,rb4;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vp = (ViewPager) findViewById(R.id.vp);
        rg = (RadioGroup) findViewById(R.id.rg);
        rb1 = (RadioButton) findViewById(R.id.rb1);
        rb2 = (RadioButton) findViewById(R.id.rb2);
        rb3 = (RadioButton) findViewById(R.id.rb3);
        rb4 = (RadioButton) findViewById(R.id.rb4);
        initData();
        VpApdata VpA = new VpApdata(getSupportFragmentManager());
        vp.setAdapter(VpA);
        //给ViewPage做监听事件
        vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }
            @Override
            public void onPageSelected(int position) {
                switch (position){
                    case 0:
                        rg.check(R.id.rb1);
                        rb1.setBackgroundColor(Color.BLUE);
                        rb2.setBackgroundColor(Color.GRAY);
                        break;
                    case 1:
                        rg.check(R.id.rb2);
                        rb2.setBackgroundColor(Color.BLUE);
                        rb1.setBackgroundColor(Color.GRAY);
                        break;
                    case 2:
                        rg.check(R.id.rb3);
                        rb3.setBackgroundColor(Color.GREEN);
                        rb4.setBackgroundColor(Color.GRAY);
                        break;
                    case 3:
                        rg.check(R.id.rb4);
                        rb4.setBackgroundColor(Color.GREEN);
                        rb3.setBackgroundColor(Color.GRAY);
                        break;
                }
            }
            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
        //RadioGroup的监听
        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {

                switch(i){
                    case R.id.rb1:
                        vp.setCurrentItem(0);
                        break;
                    case R.id.rb2:
                        vp.setCurrentItem(1);
                        break;
                    case R.id.rb3:
                        vp.setCurrentItem(2);
                        break;
                    case R.id.rb4:
                        vp.setCurrentItem(3);
                        break;
                }
            }
        });

    }

    private void initData() {
        list = new ArrayList<Fragment>();
        list.add(new Fragment_1());
        list.add(new Fragment_2());
        list.add(new Fragment_3());
        list.add(new Fragment_4());
    }

    class VpApdata extends FragmentPagerAdapter{

        public VpApdata(FragmentManager fm) {
            super(fm);
        }

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

        @Override
        public int getCount() {
            return list.size();
        }
    }
}
主Activity的布局
 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.xlistview.MainActivity">
    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </android.support.v4.view.ViewPager>
    <RadioGroup
        android:id="@+id/rg"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal"
        android:layout_alignParentBottom="true"
        >
        <RadioButton
            android:id="@+id/rb1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="首页"
             android:button="@null"
            android:gravity="center"
            />
        <RadioButton
            android:id="@+id/rb2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="发现"
            android:button="@null"
            android:gravity="center"
            />
        <RadioButton
            android:id="@+id/rb3"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="搜索"
            android:button="@null"
            android:gravity="center"
            />
        <RadioButton
            android:id="@+id/rb4"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="我的"
            android:button="@null"
            android:gravity="center"
            />

    </RadioGroup>
</RelativeLayout>

Xlist的主方法
 
public class Fragment_1 extends Fragment {
    ViewPager vp_f1;  //用于实现轮播图的控件
    bean bn;  //bean包 也就是解析完数据的包
    VPNews VP;  //请求网络数据的包
    XListView xlv; //XlistView
    Boolean flag=false;  //判断true 还是 false 用于刷新数据的
    List<String> list; //只记录地址
    Handler handler=new Handler(); //handler 机制
    int index=10000; //轮播图图片的轮播速度
    Myadapter MPA; //XlistView多条目加载  上拉刷新 下拉加载 的适配器
    List<bean.DataBean.ComicsBean>list1; //list集合的bean包
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        //加载Fragment的布局
        View  view = View.inflate(getActivity(), R.layout.fragment_1,null);
        //ViewPage的控件
        vp_f1 =view.findViewById(R.id.vp_f1);
        //XlistView的控件
        xlv = view.findViewById(R.id.xlv);
        //初始化数据
        initData();
        //设置适配器
        MPA=new Myadapter(); //XlistView适配器的初始化
        xlv.setAdapter(MPA);//绑定listView适配器
        xlv.setPullLoadEnable(true);//设置当前上拉加载更多是否可用 pullLoadEnabled true表示可用,false表示不可用
        xlv.setPullRefreshEnable(true);//设置当前下拉刷新是否可用 pullRefreshEnabled true表示可用,false表示不可用
        xlv.setRefreshTime("2017-09-7"); //刷新时间
        //xlistView上拉加载,下拉刷新
        xlv.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //当flag==false是重新刷新数据
                        flag=false;
                        initData();
                        MPA.notifyDataSetChanged();
                        xlv.stopRefresh();
                    }
                },2000);
            }
            @Override
            public void onLoadMore() {
                //当flag==true是加载更多数据,handler实现2秒
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        flag=true;
                        list1.addAll(bn.getData().getComics());
                        MPA.notifyDataSetChanged();
                        xlv.stopLoadMore();
                    }
                },2000);
            }
        });
        return view;
    }
    //轮播的加载
       private void initData() {
        //异步加载数据
        new AsyncTask<String,String,String>(){
            @Override
            protected String doInBackground(String... strings) {
                String result=new VPNews().getData();
                Gson gson=new Gson();
                bn = gson.fromJson(result, bean.class);
                list1 = bn.getData().getComics();
                return result;
            }
            @Override
            protected void onPostExecute(String result) {
                initVP();
                //handler实现倒计时2秒换页    postDelayed 一个定时器
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        index++;
                        vp_f1.setCurrentItem(index);
                        handler.postDelayed(this,2000);
                    }
                },3000);
                super.onPostExecute(result);
            }
        }.execute();
    }
    //XlistView适配器
    class Myadapter extends BaseAdapter{
        public static final int TYPE_ONE=0;
        public static final int TYPE_TWO=1;
        @Override
        public int getCount() {
            if(bn!=null){
                return bn.getData().getComics().size();
            }
            return 0;
        }
        @Override
        public int getViewTypeCount() {
            return 5;
        }
        @Override
        public int getItemViewType(int position) {
            int comic_type = bn.getData().getComics().get(position).getComic_type();
            if(comic_type==0){
                return TYPE_ONE;
            }else{
                return TYPE_TWO;
            }
        }
        @Override
        public Object getItem(int i) {
            return null;
        }

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


        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            //多条目展示数据
            ViewHolder holder = null;
            ViewHolder1 holder1 = null;
            int type = getItemViewType(i);
            if(view==null){
                if(type==TYPE_ONE){
                    //加载视图
                    view=View.inflate(getActivity(),R.layout.list1,null);
                    holder=new ViewHolder();
                    //找控件
                    holder.tv1=view.findViewById(R.id.tv1);
                    holder.iv1=view.findViewById(R.id.iv1);
                    view.setTag(holder);
                }else{
                    //加载视图
                    view=View.inflate(getActivity(),R.layout.list2,null);
                    holder1= new ViewHolder1();
                    //找控件
                    holder1.tv2=view.findViewById(R.id.tv2);
                    holder1.iv2=view.findViewById(R.id.iv2);
                    view.setTag(holder1);

                }
            }else{
                if(type==TYPE_ONE){
                    holder= (ViewHolder) view.getTag();
                }else{
                    holder1= (ViewHolder1) view.getTag();
                }
            }
            //给相对应的控件赋值
            if(type==TYPE_ONE){
                holder.tv1.setText(bn.getData().getComics().get(i).getTitle());
                ImageLoader.getInstance().displayImage(bn.getData().getComics().get(i).getCover_image_url(),holder.iv1);
            }else{
                holder1.tv2.setText(bn.getData().getComics().get(i).getTitle());
                ImageLoader.getInstance().displayImage(bn.getData().getComics().get(i).getCover_image_url(),holder1.iv2);
            }
            return view;
        }
    }
    static class ViewHolder{
        TextView tv1;
        ImageView iv1;
    }
    static class ViewHolder1{
        TextView tv2;
        ImageView iv2;
    }

    public void initVP(){
        //定义一个集合
        list=new ArrayList<String>();
        //把从网络请求的图片放入集合中, 在放在iv中
        for (int i=0;i<bn.getData().getComics().size();i++){

            list.add(bn.getData().getComics().get(i).getCover_image_url());
        }
        //viewPager适配器
        MyVPadapter myVPadapter=new MyVPadapter();
        vp_f1.setAdapter(myVPadapter);//绑定适配器
        vp_f1.setCurrentItem(10000);//轮播图片的时间

    }
    //轮播图的适配器
    class MyVPadapter extends PagerAdapter{
        @Override
        public int getCount() {
            if(list!=null){
                return Integer.MAX_VALUE;
            }
            return 0;
        }
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view==object;
        }
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
        @Override
        public Object instantiateItem(ViewGroup container, int position) {

            //imageView....返回
            ImageView imageView = new ImageView(getActivity());
            //加载图片
            ImageLoader.getInstance().displayImage(list.get(position%list.size()),imageView);
            //加到container
            container.addView(imageView);
            return imageView;
        }
    }
}

数据的解析
public class VPNews {
    public String getData(){
        String result=null;
        try {
            URL url=new URL("http://api.kkmh.com/v1/daily/comic_lists/0?since=0&gender=0&sa_event=eyJwcm9qZWN0Ijoia3VhaWthbl9hcHAiLCJ0aW1lIjoxNDg3NzQyMjQwNjE1LCJwcm9wZXJ0aWVzIjp7IkhvbWVwYWdlVGFiTmFtZSI6IueDremXqCIsIlZDb21tdW5pdHlUYWJOYW1lIjoi54Ot6ZeoIiwiJG9zX3ZlcnNpb24iOiI0LjQuMiIsIkdlbmRlclR5cGUiOiLlpbPniYgiLCJGcm9tSG9tZXBhZ2VUYWJOYW1lIjoi54Ot6ZeoIiwiJGxpYl92ZXJzaW9uIjoiMS42LjEzIiwiJG5ldHdvcmtfdHlwZSI6IldJRkkiLCIkd2lmaSI6dHJ1ZSwiJG1hbnVmYWN0dXJlciI6ImJpZ25veCIsIkZyb21Ib21lcGFnZVVwZGF0ZURhdGUiOjAsIiRzY3JlZW5faGVpZ2h0IjoxMjgwLCJIb21lcGFnZVVwZGF0ZURhdGUiOjAsIlByb3BlcnR5RXZlbnQiOiJSZWFkSG9tZVBhZ2UiLCJGaW5kVGFiTmFtZSI6IuaOqOiNkCIsImFidGVzdF9ncm91cCI6MTEsIiRzY3JlZW5fd2lkdGgiOjcyMCwiJG9zIjoiQW5kcm9pZCIsIlRyaWdnZXJQYWdlIjoiSG9tZVBhZ2UiLCIkY2FycmllciI6IkNoaW5hIE1vYmlsZSIsIiRtb2RlbCI6IlZQaG9uZSIsIiRhcHBfdmVyc2lvbiI6IjMuNi4yIn0sInR5cGUiOiJ0cmFjayIsImRpc3RpbmN0X2lkIjoiQTo2YWRkYzdhZTQ1MjUwMzY1Iiwib3JpZ2luYWxfaWQiOiJBOjZhZGRjN2FlNDUyNTAzNjUiLCJldmVudCI6IlJlYWRIb21lUGFnZSJ9 ");
            HttpURLConnection conn= (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);
            int code = conn.getResponseCode();
            if(code==200){
                InputStream is = conn.getInputStream();
                ByteArrayOutputStream bos=new ByteArrayOutputStream();
                int len=-1;
                byte[] buff=new byte[1024];
                while((len=is.read(buff))!=-1){
                    bos.write(buff,0,len);
                }
                result=new String(bos.toByteArray());

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}

温馨提示:用ImageLode 记得清单文件 ,记得加联网权限,和XlistView的第三方架包
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值