Banner轮播 + XlistView 网络获取数据

来源:互联网 发布:世界征服者3 全将 数据 编辑:程序博客网 时间:2024/06/04 17:50

   需要的依赖:

compile 'com.youth.banner:banner:1.4.9'compile project(':mylibrary')     compile 'com.google.code.gson:gson:2.2.4'compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
 主类布局为ViewPager 和RadioGroup 实现 点击切换ViewPager的页面:

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"    android:layout_height="match_parent" tools:context="com.bwei.ssp.zk3_lx.MainActivity"    android:orientation="vertical">    <android.support.v4.view.ViewPager        android:id="@+id/vp"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="9" />    <RadioGroup       android:layout_width="match_parent"       android:layout_height="0dp"       android:layout_weight="1"       android:orientation="horizontal"       android:id="@+id/rg"       android:gravity="center"       >       <RadioButton           android:layout_width="0dp"           android:layout_height="wrap_content"           android:text="首页"           android:id="@+id/b1"           android:button="@null"           android:layout_weight="1"           />       <RadioButton           android:layout_width="0dp"           android:layout_height="wrap_content"           android:text="发现"           android:id="@+id/b2"           android:layout_weight="1"           android:button="@null"           />       <RadioButton           android:layout_width="0dp"           android:layout_height="wrap_content"           android:text="社区"           android:id="@+id/b3"           android:button="@null"           android:layout_weight="1"           />       <RadioButton           android:layout_width="0dp"           android:layout_height="wrap_content"           android:text="我的"           android:id="@+id/b4"           android:button="@null"           android:layout_weight="1"           />   </RadioGroup></LinearLayout>

   主类 为ViewPager加载界面 并为RadioGroup 绑定:

package com.bwei.ssp.zk3_lx;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.widget.RadioGroup;import com.bwei.ssp.zk3_lx.Fragment.F1;import com.bwei.ssp.zk3_lx.Fragment.F2;import com.bwei.ssp.zk3_lx.Fragment.F3;import com.bwei.ssp.zk3_lx.Fragment.F4;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener {    private ViewPager vp;    private RadioGroup rg;    private List<Fragment> flist;    private Madapter madapter;    @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);        //初始化控件        flist = new ArrayList<>();        flist.add(new F1());        flist.add(new F2());        flist.add(new F3());        flist.add(new F4());        //为ViewPager 设置数据        madapter = new Madapter(getSupportFragmentManager());        vp.setAdapter(madapter);       //添加适配器        rg.setOnCheckedChangeListener(this);        //为 RadioGoup设置监听事件 根据点击加载不同的页面    }    @Override    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {        switch (checkedId){            case  R.id.b1:                vp.setCurrentItem(0);                //设置ViewPage的默认页面                break;            case  R.id.b2:                vp.setCurrentItem(1);                break;            case  R.id.b3:                vp.setCurrentItem(2);                break;            case  R.id.b4:                vp.setCurrentItem(3);                break;        }    }    private class Madapter extends FragmentPagerAdapter{        public Madapter(FragmentManager fm) {            super(fm);        }        @Override        public Fragment getItem(int position) {            return flist.get(position);        }         //返回的为页面集合的长度        @Override        public int getCount() {            return flist.size();        }    }}
  

因为获取的数据在网络上所以要创建网络获取数据类 和网络图片框架 

网络获取数据类:

package com.bwei.ssp.mylibrary;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.util.Log;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;/** * Created by lenovo on 2017/10/8. */public class Tools {    private static  String tag ="ssp";  public static  String getJson(String url){      try {          URL url1 = new URL(url);          HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection();          int responseCode = urlConnection.getResponseCode();          if(responseCode==200){              InputStream inputStream = urlConnection.getInputStream();              StringBuilder stringBuilder = new StringBuilder();              BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));              String temp="";              while((temp=bufferedReader.readLine())!=null){                  stringBuilder.append(temp);              }              String str = stringBuilder.toString();              return  str;          }else{              Log.e(tag, responseCode+"" );          }      } catch (MalformedURLException e) {          e.printStackTrace();      } catch (IOException e) {          e.printStackTrace();      }      return "";  }  public  static Bitmap getBitmap(String Burl){      try {          URL url = new URL(Burl);          HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();          int responseCode = urlConnection.getResponseCode();          if(responseCode==200){              InputStream inputStream = urlConnection.getInputStream();              Bitmap bitmap = BitmapFactory.decodeStream(inputStream);              return bitmap;          }else{              Log.e(tag, responseCode+"" );          }      } catch (MalformedURLException e) {          e.printStackTrace();      } catch (IOException e) {          e.printStackTrace();      }      return null;  }}
图片框架:

package com.bwei.ssp.zk3_lx;import android.app.Application;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;/** * Created by lenovo on 2017/10/18. */public class MApp extends Application {    @Override    public void onCreate() {        super.onCreate();        ImageLoaderConfiguration build = new ImageLoaderConfiguration.Builder(this).build();        //创建网络图片框架  需要在清单文件家name属性        ImageLoader.getInstance().init(build);    }}
 Banner 为封装好的类可以直接实现轮播 但需要掉它的网络获取图片的方法:

package com.bwei.ssp.zk3_lx;import android.content.Context;import android.widget.ImageView;import com.youth.banner.loader.ImageLoader;/** * Created by lenovo on 2017/10/18. */public class BennerLoder extends ImageLoader {    @Override    public void displayImage(Context context, Object obj, ImageView imageView) {        com.nostra13.universalimageloader.core.ImageLoader imageLoaderInstance = com.nostra13.universalimageloader.core.ImageLoader.getInstance();        imageLoaderInstance.displayImage((String) obj, imageView);        //轮播必须实图片的框架类从网络获取图片    }}要在ViewPage的第一个界面做轮播图和XlistView 获取数据和上下拉刷新 布局:banner的高看情况自己设定
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <com.youth.banner.Banner        android:layout_width="match_parent"        android:layout_height="150dp"        android:id="@+id/banner"        />   <com.bwei.ssp.mylibrary.View.XListView       android:layout_width="match_parent"       android:layout_height="0dp"       android:layout_weight="1"       android:id="@+id/xlv"       ></com.bwei.ssp.mylibrary.View.XListView></LinearLayout>
页面的逻辑代码
package com.bwei.ssp.zk3_lx.Fragment;import android.os.AsyncTask;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 android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.bwei.ssp.mylibrary.Tools;import com.bwei.ssp.mylibrary.View.XListView;import com.bwei.ssp.zk3_lx.Bean;import com.bwei.ssp.zk3_lx.BennerLoder;import com.bwei.ssp.zk3_lx.R;import com.google.gson.Gson;import com.nostra13.universalimageloader.core.ImageLoader;import com.youth.banner.Banner;import java.util.ArrayList;import java.util.List;/** * Created by lenovo on 2017/10/18. */public class F1 extends Fragment implements XListView.IXListViewListener {    private Banner banner;    private XListView xlv;    private  String url="http://api.kkmh.com/v1/daily/comic_lists/0?since=0&gender=0&sa_event=eyJwcm9qZWN0Ijoia3VhaWthbl9hcHAiLCJ0aW1lIjoxNDg3NzQyMjQwNjE1LCJwcm9wZXJ0aWVzIjp7IkhvbWVwYWdlVGFiTmFtZSI6IueDremXqCIsIlZDb21tdW5pdHlUYWJOYW1lIjoi54Ot6ZeoIiwiJG9zX3ZlcnNpb24iOiI0LjQuMiIsIkdlbmRlclR5cGUiOiLlpbPniYgiLCJGcm9tSG9tZXBhZ2VUYWJOYW1lIjoi54Ot6ZeoIiwiJGxpYl92ZXJzaW9uIjoiMS42LjEzIiwiJG5ldHdvcmtfdHlwZSI6IldJRkkiLCIkd2lmaSI6dHJ1ZSwiJG1hbnVmYWN0dXJlciI6ImJpZ25veCIsIkZyb21Ib21lcGFnZVVwZGF0ZURhdGUiOjAsIiRzY3JlZW5faGVpZ2h0IjoxMjgwLCJIb21lcGFnZVVwZGF0ZURhdGUiOjAsIlByb3BlcnR5RXZlbnQiOiJSZWFkSG9tZVBhZ2UiLCJGaW5kVGFiTmFtZSI6IuaOqOiNkCIsImFidGVzdF9ncm91cCI6MTEsIiRzY3JlZW5fd2lkdGgiOjcyMCwiJG9zIjoiQW5kcm9pZCIsIlRyaWdnZXJQYWdlIjoiSG9tZVBhZ2UiLCIkY2FycmllciI6IkNoaW5hIE1vYmlsZSIsIiRtb2RlbCI6IlZQaG9uZSIsIiRhcHBfdmVyc2lvbiI6IjMuNi4yIn0sInR5cGUiOiJ0cmFjayIsImRpc3RpbmN0X2lkIjoiQTo2YWRkYzdhZTQ1MjUwMzY1Iiwib3JpZ2luYWxfaWQiOiJBOjZhZGRjN2FlNDUyNTAzNjUiLCJldmVudCI6IlJlYWRIb21lUGFnZSJ9";    private List<Bean.DataBean.ComicsBean> jlist ;    ArrayList<String> list = new ArrayList<>();    private ImageLoader instance;    private Madapter madapter;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View v = View.inflate(getActivity(), R.layout.f1, null);        banner = (Banner) v.findViewById(R.id.banner);        xlv = (XListView)v.findViewById(R.id.xlv);         //初始化组件        instance = ImageLoader.getInstance();        //获取图片框架对象        xlv.setXListViewListener(this);        xlv.setPullLoadEnable(true);        //设置监听 并设置xlistview的模式        madapter = new Madapter();       //创建适配器        initData();        //加载网络获取数据工具类        return v;    }    private void initData() {        new MAsazyTask().execute(url);    }    @Override    public void onRefresh() {        list.clear();        initData();        xListViewUIComplete();//完成ui    }    private void xListViewUIComplete() {        //让刷新头消失        XListView xListView;        xlv.stopRefresh();        //让加载更多文字消失        xlv.stopLoadMore();        //设置刷新时间为"刚刚"        xlv.setRefreshTime("刚刚");    }    @Override    public void onLoadMore() {        initData();        xListViewUIComplete();    }    private class MAsazyTask extends AsyncTask<String,Void,String>{        @Override        protected String doInBackground(String... strings) {            return Tools.getJson(strings[0]);        }        @Override        protected void onPostExecute(String s) {            super.onPostExecute(s);            Gson gson = new Gson();            Bean bean = gson.fromJson(s, Bean.class);            jlist = bean.getData().getComics();            //获取网络数据的集合            for (int i = 0; i <jlist.size() ; i++) {                list.add( jlist.get(i).getCover_image_url());                 //调取图片地址并把数据添加到集合            }            banner.setImageLoader(new BennerLoder());            //加载图片框架类            banner.setImages(list);            //为baner加载图片            banner.start();            //开始执行        xlv.setAdapter(madapter);            //为 xlisiview加载适配器        }    }    private class Madapter extends BaseAdapter{        @Override        public int getCount() {            return jlist.size();        }        @Override        public Object getItem(int i) {            return jlist.get(i);        }        @Override        public long getItemId(int i) {            return i;        }        @Override        public View getView(int i, View view, ViewGroup viewGroup) {            view =View.inflate(getActivity(),R.layout.item,null);            TextView tv =(TextView) view.findViewById(R.id.tv);            TextView tv1 =(TextView) view.findViewById(R.id.tv1);            TextView tv2 =(TextView) view.findViewById(R.id.tv2);            ImageView ig =(ImageView) view.findViewById(R.id.ig);             tv.setText(jlist.get(i).getTitle());            tv1.setText("作者:");            tv2.setText(jlist.get(i).getLabel_text());            instance.displayImage(jlist.get(i).getCover_image_url(),ig);            return view;        }    }}

原创粉丝点击