Banner轮播 + XlistView 网络获取数据

本文介绍了一个基于Android的应用中实现界面切换及轮播图的具体步骤。通过使用ViewPager与RadioGroup来完成不同页面间的平滑切换,并利用Banner库实现轮播图功能。此外,还介绍了如何通过网络请求获取数据并显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   需要的依赖:

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;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值