TabLayout与ViewPager实现请求数据与频道对应

来源:互联网 发布:机械三维设计软件 编辑:程序博客网 时间:2024/06/10 17:49

如何才能实现类似于今日头条一类的新闻APP点击频道与请求的数据一致呢? 这是因为每个频道都有自己对应的接口但每个接口的字段都是一致的所以呢我们就只需写一个fragment和一个适配器来进行复用就可轻松实现效果

1、布局

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    xmlns:app="http://schemas.android.com/apk/res-auto">    <!--            app:tabGravity="center"    设置居中对齐            app:tabIndicatorColor="@color/colorAccent" 下滑线的颜色            app:tabMode="scrollable"  设置tabLayoout菜单的模式,,,scrollable可以横向滚动            app:tabSelectedTextColor="@color/colorPrimaryDark"  选中的时候文字的颜色            app:tabTextColor="@color/colorPrimary"       文本默认的颜色            app:tabTextAppearance="@android:style/TextAppearance.Large"改变字体大小        -->    <android.support.design.widget.TabLayout        android:id="@+id/f2_tab"        android:layout_width="match_parent"        android:layout_height="wrap_content"        app:tabMode="scrollable"        app:tabSelectedTextColor="@color/tab_tv_selected"        app:tabTextColor="@color/tab_tv_normal"        app:tabIndicatorColor="@color/title"        app:tabTextAppearance="@android:style/TextAppearance.Large"        ></android.support.design.widget.TabLayout>    <android.support.v4.view.ViewPager        android:layout_below="@+id/f2_tab"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/f2_vp"></android.support.v4.view.ViewPager></RelativeLayout>
2、代码
public class F2 extends Fragment {    private String path1 = "http://ic.snssdk.com/2/article/v25/stream/?count=20&min_behot_time=1457659690&bd_latitude=4.9E-324&bd_longitude=4.9E-324&bd_loc_time=1457672153&loc_mode=5&lac=4527&cid=28883&iid=3839760160&device_id=12246291682&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=iToolsAVM&os_api=19&os_version=4.4.4&uuid=352284045861006&openudid=84c1c7b192991cc6";    private String path2 = "http://ic.snssdk.com/2/article/v25/stream/?category=news_local&count=20&min_behot_time=1455521226&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455521401&loc_mode=5&user_city=%E5%8C%97%E4%BA%AC&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";    private String path3 = "http://ic.snssdk.com/2/article/v25/stream/?category=news_local&count=20&min_behot_time=1455521226&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455521401&loc_mode=5&user_city=%E5%8C%97%E4%BA%AC&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";    private String path4 = "http://ic.snssdk.com/2/article/v25/stream/?category=news_health&count=20&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455524092&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";    private String path5 = "http://ic.snssdk.com/2/article/v25/stream/?category=news_society&count=20&min_behot_time=1455521720&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455522107&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";    private String path6 = "http://ic.snssdk.com/2/article/v25/stream/?category=news_entertainment&count=20&min_behot_time=1455522338&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455522784&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";    private String path7 = "http://ic.snssdk.com/2/article/v25/stream/?category=news_tech&count=20&min_behot_time=1455522427&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455522784&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";    private String path8 = "http://ic.snssdk.com/2/article/v25/stream/?category=news_car&count=20&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455522784&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";    private String path9 = "http://ic.snssdk.com/2/article/v25/stream/?category=news_sports&count=20&min_behot_time=1455522629&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455522784&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";    private String path10= "http://ic.snssdk.com/2/article/v25/stream/?category=news_finance&count=20&min_behot_time=1455522899&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455523440&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";    private String path11 = "http://ic.snssdk.com/2/article/v25/stream/?category=news_military&count=20&min_behot_time=1455522991&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455523440&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";    private String path12 = "http://ic.snssdk.com/2/article/v25/stream/?category=news_world&count=20&min_behot_time=1455523059&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455523440&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";    private String path13 = "http://ic.snssdk.com/2/article/v25/stream/?count=20&min_behot_time=1455521444&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82" + "&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455521401&loc_mode=5&la" + "c=4527&cid=28883&iid=3642583580&d" + "evice_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&" + "version_code=460&device_platform=android&d" + "evice_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";    private String path14 = "http://ic.snssdk.com/2/article/v25/stream/?category=news_entertainment&count=20&min_behot_time=1455522338&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455522784&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";    private String path15 = "http://ic.snssdk.com/2/article/v25/stream/?category=news_health&count=20&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455524092&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";    private String path16 = "http://ic.snssdk.com/2/article/v25/stream/?category=news_military&count=20&min_behot_time=1455522991&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455523440&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";    private String[] titles = {"推荐","热点","本地","视频","社会","娱乐","科技","汽车","体育","财经","军事","国际","段子","趣图","健康","美女"};    private String[] ports={path1,path2,path3,path4,path5,path6,path7,path8,path9,path10,path11,path12,path13,path14,path15,path16};    private TabLayout f2_tab;    private ViewPager f2_vp;    private ArrayList<Fragment> fragmentList;    private F2_VP f2_vp1;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        //获取布局        View view = inflater.inflate(R.layout.f2, null);        //获取控件        f2_tab=(TabLayout)view.findViewById(R.id.f2_tab);        f2_vp=(ViewPager)view.findViewById(R.id.f2_vp);        //创建集合存放fragment        fragmentList = new ArrayList<>();        for (int i = 0; i <titles.length ; i++) {            f2_vp1 = new F2_VP();            //设置setArguments            Bundle bundle = new Bundle();            bundle.putString("port",ports[i]);            f2_vp1.setArguments(bundle);            //添加到集合            fragmentList.add(f2_vp1);        }        //设置适配器        f2_vp.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) {            @Override            public CharSequence getPageTitle(int position) {                return titles[position];            }            @Override            public Fragment getItem(int position) {                return fragmentList.get(position);            }            @Override            public int getCount() {                return titles.length;            }        });        //实现ViewPagerTabLayout联动        f2_tab.setupWithViewPager(f2_vp);        return view;    }}

3、创建fragment来进行复用
package com.example.dell.ttapp.fragment;import android.os.Bundle;import android.os.Handler;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.ListView;import android.widget.TextView;import com.example.dell.ttapp.Beans.F2_Bean;import com.example.dell.ttapp.R;import com.example.dell.ttapp.utils.ImageLoaderUtils;import com.example.dell.ttapp.utils.MyTask;import com.google.gson.Gson;import com.handmark.pulltorefresh.library.PullToRefreshBase;import com.handmark.pulltorefresh.library.PullToRefreshListView;import com.nostra13.universalimageloader.core.ImageLoader;import java.util.List;/** * Created by DELL on 2017/12/18. */public class F2_VP extends Fragment{    private PullToRefreshListView pull;    private String port;    private List<F2_Bean.DataBean> data;    private Handler myHandler=new Handler();    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        port = getArguments().getString("port");        //获取控件        View view = inflater.inflate(R.layout.f2_vp, null);        //获取布局        pull=(PullToRefreshListView)view.findViewById(R.id.tab_pull);        pull.setMode(PullToRefreshBase.Mode.BOTH);        pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {            @Override            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {                addtoTop();                PullRefreshComplete();            }            @Override            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {                addtoBottom();                PullRefreshComplete();            }        });        initData();        return view;    }    private void PullRefreshComplete() {        myHandler.postDelayed(new Runnable() {            @Override            public void run() {                pull.onRefreshComplete();            }        },1000);    }    private void addtoBottom() {        MyTask myTask = new MyTask(new MyTask.Icallbacks() {            @Override            public void updataUiByjson(String jsonstr) {                Gson gson = new Gson();                F2_Bean f2Bean = gson.fromJson(jsonstr, F2_Bean.class);                data.addAll(f2Bean.getData());                //设置适配器                pull.setAdapter(new MyAdapter());            }        });        myTask.execute(port);    }    private void addtoTop() {        MyTask myTask = new MyTask(new MyTask.Icallbacks() {            @Override            public void updataUiByjson(String jsonstr) {                Gson gson = new Gson();                F2_Bean f2Bean = gson.fromJson(jsonstr, F2_Bean.class);                data.addAll(f2Bean.getData());                //设置适配器                pull.setAdapter(new MyAdapter());            }        });        myTask.execute(port);    }    private void initData() {        MyTask myTask = new MyTask(new MyTask.Icallbacks() {            @Override            public void updataUiByjson(String jsonstr) {                Gson gson = new Gson();                F2_Bean f2Bean = gson.fromJson(jsonstr, F2_Bean.class);                data = f2Bean.getData();                //设置适配器                pull.setAdapter(new MyAdapter());            }        });        myTask.execute(port);    }    private class MyAdapter extends BaseAdapter{        private static final int type1 = 0;        private static final int type2 = 1;        private static final int type3 = 2;        private static final int type4 = 3;        public void loadMore(List<F2_Bean.DataBean> list1, boolean falg){            for (F2_Bean.DataBean bean : list1){                if (falg){                    data.add(bean);                }else{                    data.add(0,bean);                }            }            notifyDataSetChanged();        }        @Override        public int getCount() {            return data.size();        }        //集合的下标        @Override        public Object getItem(int i) {            return data.get(i);        }        @Override        public long getItemId(int i) {            return i;        }        @Override        public int getItemViewType(int position) {            if (data.get(position).getVideo_detail_info()==null){                if(data.get(position).getImage_list()==null || "".equals(data.get(position).getImage_list())){                    return type1;                }else if(data.get(position).getImage_list().size() == 2){                    return type2;                }else{                    return type3;                }            }else{                return type4;            }        }        @Override        public int getViewTypeCount() {            return 4;        }        @Override        public View getView(int i, View view, ViewGroup viewGroup) {            int type = getItemViewType(i);            //定义ViewHolder为空            ViewHolder holder = null;            //判断view是否为空            if (view == null) {                //实例化ViewHolder                holder = new ViewHolder();                switch (type){                    case 0:                        //加载布局                        view = View.inflate(getActivity(), R.layout.f2_item1, null);                        //查找控件                        holder.tv1 = view.findViewById(R.id.tv1);                        break;                    case 1:                        //加载布局                        view = View.inflate(getActivity(), R.layout.f2_item2, null);                        //查找控件                        holder.tv2 = view.findViewById(R.id.tv2);                        holder.iv2 = view.findViewById(R.id.iv2);                        break;                    case 2:                        //加载布局                        view = View.inflate(getActivity(), R.layout.f2_item3, null);                        //查找控件                        holder.tv3 = view.findViewById(R.id.tv3);                        holder.iv1 = view.findViewById(R.id.iv3_img1);                        holder.iv2 = view.findViewById(R.id.iv3_img2);                        holder.iv3 = view.findViewById(R.id.iv3_img3);                        break;                    case 3:                        //加载布局                        view = View.inflate(getActivity(), R.layout.f2_item4, null);                        //查找控件                        holder.tv4 = view.findViewById(R.id.tv4);                        holder.iv4 = view.findViewById(R.id.iv4);                        break;                }                view.setTag(holder);            } else {                holder = (ViewHolder) view.getTag();            }            switch (type){                case 0:                    //展示值                    holder.tv1.setText(data.get(i).getTitle());                    break;                case 1:                    //展示值                    holder.tv2.setText(data.get(i).getTitle());                    ImageLoader.getInstance().displayImage(data.get(i).getMiddle_image().getUrl(), holder.iv2, ImageLoaderUtils.getImageOptions());                    break;                case 2:                    //展示值                    holder.tv3.setText(data.get(i).getTitle());                    if (data.get(i).getImage_list().size() == 3){                        ImageLoader.getInstance().displayImage(data.get(i).getImage_list().get(0).getUrl(),holder.iv1, ImageLoaderUtils.getImageOptions());                        ImageLoader.getInstance().displayImage(data.get(i).getImage_list().get(1).getUrl(),holder.iv2, ImageLoaderUtils.getImageOptions());                        ImageLoader.getInstance().displayImage(data.get(i).getImage_list().get(2).getUrl(),holder.iv3, ImageLoaderUtils.getImageOptions());                    }                    break;                case 3:                    //展示值                    holder.tv4.setText(data.get(i).getTitle());                    ImageLoader.getInstance().displayImage(data.get(i).getVideo_detail_info().getDetail_video_large_image().getUrl(),holder.iv4, ImageLoaderUtils.getImageOptions());                    break;            }            //返回view            return view;        }        //定义ViewHolder        class ViewHolder {            TextView tv1,tv2,tv3,tv4;            ImageView iv1,iv2,iv3,iv4;        }    }}


原创粉丝点击