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; } }); //实现ViewPager与TabLayout联动 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; } }}
阅读全文
0 0
- TabLayout与ViewPager实现请求数据与频道对应
- TabLayout与ViewPager组合实现tab导航
- Android TabLayout与ViewPager实现动态Tab
- TabLayout与viewpager实现顶部导航栏
- ViewPager与TabLayout纵向实现效果
- tabLayout与viewPager联动
- TabLayout与ViewPager组合
- TabLayout与ViewPager
- TabLayout、ViewPager与Fragment
- TabLayout与ViewPager联用
- Tablayout与viewpager联动
- TabLayout与ViewPager结合
- TabLayout与ViewPager联动
- TabLayout与viewpager
- Design TabLayout+ViewPager+Fragment,实现选中请求数据+缓存
- Material之TabLayout与ViewPager
- ViewPager,TabLayout与三级缓存
- TabLayout与ViewPager的使用
- userdebug版本remount
- maven 下载、安装配置以及本地仓库地址、镜像仓库地址修改
- 各种距离算法
- 深入解析Linux 常用命令--cd
- 几种特殊的树以及关于树的几个规律
- TabLayout与ViewPager实现请求数据与频道对应
- WCF服务编程(5)——通过Configure()方法配置终结点
- python如何获取一个文件夹内包括子文件夹所有文件的名字和路径
- Spring框架介绍
- HaProxy+Nginx+Tomcat获取真实ip的配置问题
- 深入解析Linux 常用命令--df
- 2017-12-20 ITween
- java设计模式---策略模式
- 深入解析Linux 常用命令--du