TabLayout上导航栏+PullToRefreshListView展示数据

                                      <----TabLayout布局-------->

                                      <?xml version="1.0" encoding="utf-8"?>
                                    <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"
                                        xmlns:app="http://schemas.android.com/apk/res-auto">

                                        <android.support.design.widget.TabLayout
                                            android:id="@+id/tab_layout"

                                            android:layout_width="match_parent"
                                            android:layout_height="50dp"
                                            app:tabGravity="center"
                                            app:tabIndicatorColor="#ff0000"
                                            app:tabMode="scrollable"

                                            app:tabSelectedTextColor="#ff0000"
                                            app:tabTextColor="#00ff00">

                                        </android.support.design.widget.TabLayout>

                                        <android.support.v4.view.ViewPager
                                            android:id="@+id/view_pager"
                                            android:layout_below="@+id/tab_layout"
                                            android:layout_width="match_parent"
                                            android:layout_height="match_parent">

                                        </android.support.v4.view.ViewPager>

                                    </RelativeLayout>

                                        <----PullToRefreshListView布局--->
                                         <?xml version="1.0" encoding="utf-8"?>
                                    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                        android:orientation="vertical"
                                        android:layout_width="match_parent"
                                        android:layout_height="match_parent">

                                        <com.handmark.pulltorefresh.library.PullToRefreshListView
                                            xmlns:ptr="http://schemas.android.com/apk/res-auto"
                                            android:layout_height="match_parent"
                                            android:layout_width="match_parent"
                                            android:id="@+id/refresh_list_view"
                                            ptr:ptrDrawable="@drawable/default_ptr_flip"
                                            ptr:ptrAnimationStyle="flip"
                                            ptr:ptrHeaderBackground="#383838"
                                            ptr:ptrHeaderTextColor="#FFFFFF" >

                                        </com.handmark.pulltorefresh.library.PullToRefreshListView>

                                    </LinearLayout>

                                      <----适配器 布局------>
                                       <?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="horizontal"
                                        android:padding="10dp">

                                        <ImageView
                                            android:src="@mipmap/ic_launcher"
                                            android:id="@+id/image_view"
                                            android:layout_width="100dp"
                                            android:layout_height="100dp" />

                                        <TextView
                                            android:id="@+id/text_title"
                                            android:layout_width="match_parent"
                                            android:layout_height="wrap_content"
                                            android:layout_marginLeft="10dp" />

                                    </LinearLayout>

                                   <---主页面----->
                                   package com.example.a18_zhoukao_test;

                                import android.support.design.widget.TabLayout;
                                import android.support.v4.app.Fragment;
                                import android.support.v4.app.FragmentPagerAdapter;
                                import android.support.v4.view.ViewPager;
                                import android.support.v7.app.AppCompatActivity;
                                import android.os.Bundle;

                                import java.util.ArrayList;
                                import java.util.List;

                                public class MainActivity extends AppCompatActivity {

                                    private TabLayout tabLayout;
                                    private ViewPager viewPager;
                                    private List<String> titleList;

                                    @Override
                                    protected void onCreate(Bundle savedInstanceState) {
                                        super.onCreate(savedInstanceState);
                                        setContentView(R.layout.activity_main);

                                        tabLayout = (TabLayout) findViewById(R.id.tab_layout);
                                        viewPager = (ViewPager) findViewById(R.id.view_pager);

                                        titleList = new ArrayList<>();
                                        titleList.add("福利");
                                        titleList.add("Android");
                                        titleList.add("IOS");
                                        titleList.add("休息视频");
                                        titleList.add("拓展资源");
                                        titleList.add("前端");
                                        titleList.add("all");

                                        /**
                                         * viewPager需要设置容器中装的页面数量,默认是三页,,,否则在切换的时候前面的再切换回来就不显示了
                                         */
                                        viewPager.setOffscreenPageLimit(titleList.size());

                                        //设置适配器
                                        viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {

                                            @Override
                                            public CharSequence getPageTitle(int position) {
                                                //展示的标题
                                                return titleList.get(position);
                                            }

                                            @Override
                                            public Fragment getItem(int position) {
                                                //....fragment集合viewPager使用的时候,fragment是new出来的
                                                NewsFragment newsFragment = new NewsFragment();

                                                Bundle bundle = new Bundle();

                                                //把当前位置的标题传递过去
                                                bundle.putString("name",titleList.get(position));

                                                newsFragment.setArguments(bundle);

                                                return newsFragment;
                                            }

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

                                        //绑定在一起
                                        tabLayout.setupWithViewPager(viewPager);

                                    }
                                }

                        <--- PullToRefreshListView页面--->
                         package com.example.a18_zhoukao_test;

                        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.ListView;

                        import com.google.gson.Gson;
                        import com.handmark.pulltorefresh.library.ILoadingLayout;
                        import com.handmark.pulltorefresh.library.PullToRefreshBase;
                        import com.handmark.pulltorefresh.library.PullToRefreshListView;

                        import java.io.BufferedReader;
                        import java.io.InputStream;
                        import java.io.InputStreamReader;
                        import java.net.HttpURLConnection;
                        import java.net.URL;
                        import java.net.URLEncoder;
                        import java.util.ArrayList;
                        import java.util.List;

                        /**
                         * @author Dash
                         * @date 2017/9/18
                         * @description:
                         */
                        public class NewsFragment extends Fragment {


                            private View view;
                            private PullToRefreshListView refreshListView;
                            private String param;
                            private String path;
                            private int page_num = 1;
                            private List<DataDataBean.ResultsBean> list = new ArrayList<>();
                            private MyAdapter myAdapter;


                            @Nullable
                            @Override
                            public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
                                view = inflater.inflate(R.layout.fragment_layout,container,false);

                                refreshListView = (PullToRefreshListView) view.findViewById(R.id.refresh_list_view);

                                return view;
                            }

                            @Override
                            public void onActivityCreated(@Nullable Bundle savedInstanceState) {
                                super.onActivityCreated(savedInstanceState);

                                Bundle bundle = getArguments();
                                param = bundle.getString("name", "Android");


                                //请求数据,,,设置适配器
                                getData();

                                refreshListView.setMode(PullToRefreshBase.Mode.BOTH);

                                ILoadingLayout startLabels = refreshListView.getLoadingLayoutProxy(true, false);
                                startLabels.setPullLabel("下拉刷新");
                                startLabels.setRefreshingLabel("正在刷新...");
                                startLabels.setReleaseLabel("放开刷新");
                                ILoadingLayout endLabels = refreshListView.getLoadingLayoutProxy( false, true);
                                endLabels.setPullLabel("上拉刷新");
                                endLabels.setRefreshingLabel("正在载入...");
                                endLabels.setReleaseLabel("放开刷新...");

                                //设置监听
                                refreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
                                    @Override
                                    public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                                        getRefreshData();
                                    }

                                    @Override
                                    public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                                        //上拉加载的时候 page_num加一
                                        page_num ++;
                                        getData();
                                    }
                                });
                            }

                            /**
                             * 获取刷新时的数据...刷新时只访问第一页的数据,,,,刷新的数据需要添加到集合的前边
                             *
                             * 刷新完成,,设置适配器之后刷新需要停止
                             */
                            private void getRefreshData() {

                                AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
                                    @Override
                                    protected String doInBackground(Void... voids) {

                                        try {
                                            String path = "http://gank.io/api/data/"+ URLEncoder.encode(param,"utf-8")+"/10/1";

                                            URL url = new URL(path);
                                            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

                                            connection.setRequestMethod("GET");
                                            connection.setReadTimeout(5000);
                                            connection.setConnectTimeout(5000);

                                            //获取
                                            int responseCode = connection.getResponseCode();
                                            if (responseCode == 200){
                                                InputStream inputStream = connection.getInputStream();

                                                String json = streamToString(inputStream,"utf-8");

                                                return json;

                                            }


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

                                        return "";
                                    }

                                    @Override
                                    protected void onPostExecute(String s) {
                                        //解析
                                        Gson gson = new Gson();

                                        DataDataBean dataDataBean = gson.fromJson(s, DataDataBean.class);

                                        /**
                                         * 判断数据非空
                                         */
                                        if (dataDataBean != null && dataDataBean.getResults() != null){
                                            //数据添加
                                            list.addAll(0,dataDataBean.getResults());

                                            //设置适配器
                                            setAdapter();

                                            //停止刷新
                                            refreshListView.onRefreshComplete();
                                        }

                                    }
                                };

                                asyncTask.execute();
                            }

                            /**
                             * 这个方法是刚进入界面的时候请求数据,,,,和上拉加载的时候不停的请求数据
                             *
                             * page_num每次加载的时候会加1,,,这个方法中数据添加在list集合的后面
                             *
                             * 请求设置适配器之后 刷新停止
                             */
                            private void getData() {

                                AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
                                    @Override
                                    protected String doInBackground(Void... voids) {

                                        try {
                                            String path = "http://gank.io/api/data/"+ URLEncoder.encode(param,"utf-8")+"/10/"+page_num;

                                            URL url = new URL(path);
                                            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

                                            connection.setRequestMethod("GET");
                                            connection.setReadTimeout(5000);
                                            connection.setConnectTimeout(5000);

                                            //获取
                                            int responseCode = connection.getResponseCode();
                                            if (responseCode == 200){
                                                InputStream inputStream = connection.getInputStream();

                                                String json = streamToString(inputStream,"utf-8");

                                                return json;

                                            }


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

                                        return "";
                                    }

                                    @Override
                                    protected void onPostExecute(String s) {
                                        //解析
                                        Gson gson = new Gson();

                                        DataDataBean dataDataBean = gson.fromJson(s, DataDataBean.class);


                                        /**
                                         * 判断数据非空
                                         */
                                        if (dataDataBean != null && dataDataBean.getResults() != null){
                                            //数据添加
                                            list.addAll(dataDataBean.getResults());//拿到的是每一页的数据的集合

                                            //设置适配器
                                            setAdapter();


                                            //刷新停止
                                            refreshListView.onRefreshComplete();
                                        }

                                    }
                                };

                                asyncTask.execute();

                            }

                            private void setAdapter() {
                                if (myAdapter == null){

                                    myAdapter = new MyAdapter(getActivity(),list);
                                    refreshListView.setAdapter(myAdapter);
                                }else {
                                    myAdapter.notifyDataSetChanged();
                                }

                            }

                            private String streamToString(InputStream inputStream,String charset) {
                                try {
                                    InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset);

                                    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                                    String s = null;
                                    StringBuilder builder = new StringBuilder();
                                    while ((s = bufferedReader.readLine()) != null){
                                        builder.append(s);
                                    }

                                    bufferedReader.close();
                                    return builder.toString();

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

                                return  null;
                            }
                        }

                        <---适配器页面---->
                        package com.example.a18_zhoukao_test;

                        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.nostra13.universalimageloader.core.ImageLoader;

                        import java.util.List;

                        /**
                         * @author Dash
                         * @date 2017/9/18
                         * @description:
                         */
                        public class MyAdapter extends BaseAdapter {
                            Context context;
                            List<DataDataBean.ResultsBean> list;

                            public MyAdapter(Context context, List<DataDataBean.ResultsBean> 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 View getView(int i, View view, ViewGroup viewGroup) {
                                ViewHolder holder;
                                if (view == null){
                                    view  = View.inflate(context,R.layout.item_layout,null);

                                    holder = new ViewHolder();

                                    holder.imageView = (ImageView) view.findViewById(R.id.image_view);
                                    holder.textView = (TextView) view.findViewById(R.id.text_title);

                                    view.setTag(holder);

                                }else {
                                    holder = (ViewHolder) view.getTag();
                                }

                                //设置
                                holder.textView.setText(list.get(i).getDesc());
                                /**
                                 * 加载图片之前需要判断一下是否有图片的地址
                                 */
                                if (list.get(i).getImages() != null){
                                    ImageLoader.getInstance().displayImage(list.get(i).getImages().get(0)+"?imageView2/0/w/100",holder.imageView,ImageLoaderUtil.getDefaultOption());
                                }



                                return view;
                            }

                            private class ViewHolder{
                                ImageView imageView;
                                TextView textView;
                            }
                        }


                    <---定义 imageLoader---->
                    package com.example.a18_zhoukao_test;

                    import android.app.Application;

                    /**
                     * @author Dash
                     * @date 2017/9/18
                     * @description:
                     */
                    public class BaseApplication extends Application {

                        @Override
                        public void onCreate() {
                            super.onCreate();

                            ImageLoaderUtil.init(this);
                        }
                    }

                    <---imageloader---->
                    package com.example.a18_zhoukao_test;

                    import android.content.Context;
                    import android.graphics.Bitmap;

                    import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
                    import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
                    import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
                    import com.nostra13.universalimageloader.core.DisplayImageOptions;
                    import com.nostra13.universalimageloader.core.ImageLoader;
                    import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
                    import com.nostra13.universalimageloader.core.assist.ImageScaleType;
                    import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
                    import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
                    import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
                    import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
                    import com.nostra13.universalimageloader.utils.StorageUtils;

                    import java.io.File;

                    /**
                     * @author Dash
                     * @date 2017/9/18
                     * @description:
                     */
                    public class ImageLoaderUtil {
                        /**
                         * 初始化的方法
                         *
                         * @param
                         */
                        public static void init(Context context) {

                            File cacheDir = StorageUtils.getCacheDirectory(context);  //缓存文件夹路径
                            ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)

                                    .threadPoolSize(3) // default  线程池内加载的数量
                                    .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
                                    .tasksProcessingOrder(QueueProcessingType.FIFO) // default
                                    .denyCacheImageMultipleSizesInMemory()
                                    .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
                                    .memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值
                                    .memoryCacheSizePercentage(13) // default
                                    .diskCache(new UnlimitedDiskCache(cacheDir)) // default 可以自定义缓存路径
                                    .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
                                    .diskCacheFileCount(100)  // 可以缓存的文件数量
                                    // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
                                    .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
                                    .imageDownloader(new BaseImageDownloader(context)) // default
                                    .imageDecoder(new BaseImageDecoder(true)) // default
                                    .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
                                    .writeDebugLogs() // 打印debug log
                                    .build(); //开始构建

                            ImageLoader.getInstance().init(config);

                        }

                        /**
                         * 展示图片的默认配置选项
                         */
                        public static DisplayImageOptions getDefaultOption() {
                            DisplayImageOptions options = new DisplayImageOptions.Builder()
                                    .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片
                                    .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
                                    .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片
                                    .resetViewBeforeLoading(true)  // default 设置图片在加载前是否重置、复位
                                    .delayBeforeLoading(1000)  // 下载前的延迟时间
                                    .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
                                    .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中

                                    .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
                                    .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型

                                    .displayer(new SimpleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)

                                    .build();

                            return options;
                        }
                    }

        <---清单列表----->
        <?xml version="1.0" encoding="utf-8"?>
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.example.a18_zhoukao_test">

            <uses-permission android:name="android.permission.INTERNET"/>
            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
            <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

            <application
                android:name=".BaseApplication"
                android:allowBackup="true"
                android:icon="@mipmap/ic_launcher"
                android:label="@string/app_name"
                android:supportsRtl="true"
                android:theme="@style/NoTitleTheme">
                <activity android:name=".MainActivity">
                    <intent-filter>
                        <action android:name="android.intent.action.MAIN" />

                        <category android:name="android.intent.category.LAUNCHER" />
                    </intent-filter>
                </activity>
            </application>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值