(仿头条APP项目)4.父类BaseFragment创建,用retrofit和gson获取并解析服务器端数据
文章目录
- 父类BaseFragment创建,用retrofit和gson获取并解析服务器端数据
- 效果展示
- 创建父类BaseFragment解决代码重复问题
- 用retrofit和gson获取并解析服务器端数据
- 前期准备
- 导入依赖
- 获取网络权限
- 具体实现
- 创建Api,retrofit方法与注解实现类
- 复制服务端数据,利用GsonFormat快速创建Bean类
- 在首页Fragment编写相应代码
父类BaseFragment创建,用retrofit和gson获取并解析服务器端数据
效果展示
创建父类BaseFragment解决代码重复问题
在昨天的开发中,利用了判断成员变量View是否为空解决数据丢失问题,ViewGroup的remove来解决重用parent问题。而这是每个Fragment都会产生的问题,每个都有相同的代码处理,这样不好。所以创建了一个所有Fragment界面的父类来解决这个问题
BaseFragment
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;public class BaseFragment extends Fragment {protected View view = null;@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {//判断view是否为空if(view==null) {view = getMyView();}else {//清除当前重用的view的parentViewGroup viewGroup = (ViewGroup) view.getParent();if (viewGroup!=null){viewGroup.removeView(view) ;}}return view;}protected View getMyView() {TextView textView= new TextView(getActivity());textView.setBackgroundColor(Color.GRAY);textView.setText("页面");textView.setTextSize(30);textView.setGravity(Gravity.CENTER);return textView;}
}
所有Fragment页面继承BaseFragment 并重写getMyView()方法
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import com.xzit.fragment.BaseFragment;public class Page1Fragment extends BaseFragment {@Overrideprotected View getMyView() {TextView textView= new TextView(getActivity());textView.setBackgroundColor(Color.GRAY);textView.setText("北京");textView.setTextSize(60);textView.setGravity(Gravity.CENTER);return textView;}
}
用retrofit和gson获取并解析服务器端数据
前期准备
导入依赖
//配置retrofit
implementation ‘com.squareup.retrofit2:retrofit:2.1.0’
implementation ‘com.squareup.retrofit2:converter-gson:2.1.0’
//gson
implementation ‘com.google.code.gson:gson:2.8.4’
获取网络权限
具体实现
创建Api,retrofit方法与注解实现类
复制服务端数据,利用GsonFormat快速创建Bean类
import java.util.List;public class ResponseDate {/*** data : [{"id":10007,"title":"北京","type":1,"url":"10007/list_1.json"},{"id":10006,"title":"中国","type":1,"url":"10006/list_1.json"},{"id":10008,"title":"国际","type":1,"url":"10008/list_1.json"},{"id":10010,"title":"体育","type":1,"url":"10010/list_1.json"},{"id":10091,"title":"生活","type":1,"url":"10091/list_1.json"},{"id":10012,"title":"旅游","type":1,"url":"10012/list_1.json"},{"id":10095,"title":"科技","type":1,"url":"10095/list_1.json"},{"id":10009,"title":"军事","type":1,"url":"10009/list_1.json"},{"id":10093,"title":"时尚","type":1,"url":"10093/list_1.json"},{"id":10011,"title":"财经","type":1,"url":"10011/list_1.json"},{"id":10094,"title":"育儿","type":1,"url":"10094/list_1.json"},{"id":10105,"title":"汽车","type":1,"url":"10105/list_1.json"}]* retcode : 200*/public int retcode;public List<DataBean> data;public static class DataBean {/*** id : 10007* title : 北京* type : 1* url : 10007/list_1.json*/public int id;public String title;public int type;public String url;}
}
在首页Fragment编写相应代码
HomeFragment
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
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.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;import com.example.administrator.zhjrtt.R;
import com.google.gson.Gson;
import com.xzit.bean.ResponseDate;
import com.xzit.fragment.sub.Page1Fragment;
import com.xzit.fragment.sub.Page2Fragment;
import com.xzit.fragment.sub.Page3Fragment;
import com.xzit.fragment.sub.Page4Fragment;
import com.xzit.fragment.sub.Page5Fragment;
import com.xzit.net.MyApi;import java.util.ArrayList;
import java.util.List;import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;public class HomeFragment extends BaseFragment {class MyPagerAdapter extends FragmentPagerAdapter{//创建集合存放页面private List<ResponseDate.DataBean> dates = new ArrayList<>();//创建集合存放指示器标题private List<Fragment> fragments = new ArrayList<>();public MyPagerAdapter(FragmentManager fm,List<ResponseDate.DataBean> list) {super(fm);//将一个集合中所有的数据加到当前的datasdates.addAll(list);for (ResponseDate.DataBean item:dates) {fragments.add(new Page1Fragment());}}@Nullable@Overridepublic CharSequence getPageTitle(int position) {//返回指定位置标题内容return dates.get(position).title;}@Overridepublic Fragment getItem(int i) {//返回页面内容return fragments.get(i);}@Overridepublic int getCount() {//返回页面数量return dates.size();}}MyPagerAdapter myPagerAdapter;TabLayout tabLayout;ViewPager viewPager;@Overrideprotected View getMyView() {//1.布局viewpager//2.加载View view = View.inflate(getActivity(),R.layout.fragment_home,null);viewPager = view.findViewById(R.id.vp_home);//3.定义适配器//4.初始化设置适配器//5.初始化指示器tabLayout = view.findViewById(R.id.tl_home);//向服务端获取数据getDate();return view;}private void getDate() {//1.创建retrofit对象Retrofit retrofit = new Retrofit.Builder().baseUrl("http://192.168.31.114:8080/jrtt/")//会将地址和方法上的注解进行拼接.addConverterFactory(GsonConverterFactory.create(new Gson()))//添加一个转换工厂,调用Gson对象,将json数据转换为java对象.build();//执行创建//2:重点是发请求获取服务的数据MyApi myApi = retrofit.create(MyApi.class);//3:将json数据处理一下,使用插件gsonformat生成javaBeanmyApi.getType().enqueue(new Callback<ResponseDate>() {@Overridepublic void onResponse(Call<ResponseDate> call, Response<ResponseDate> response) {//处理获取服务端数据成功ResponseDate responseDate = response.body();//定义适配器//初始化设置适配器myPagerAdapter = new MyPagerAdapter(getFragmentManager(),responseDate.data);viewPager.setAdapter(myPagerAdapter);//设置指示器tabLayout.setupWithViewPager(viewPager);}@Overridepublic void onFailure(Call<ResponseDate> call, Throwable t) {//处理获取服务端数据失败}});}
}
(仿头条APP项目)4.父类BaseFragment创建,用retrofit和gson获取并解析服务器端数据相关推荐
- (仿头条APP项目)7.首页标签页完善和微头条页面设计实现
文章目录 一.首页标签页完善 效果图 具体实现 二.微头条页面设计实现 效果图 实现思路 具体实现 布局 微头条页面实体类 业务逻辑代码 一.首页标签页完善 在之前已经把首页北京标签的新闻列表页面基本 ...
- (仿头条APP项目)5.列表页面设计实现
文章目录 列表页面设计 效果图 具体实现 添加Glide依赖 添加主页面和两个列表布局 用GsonFormat快速创建NewListData实体类存放新闻列表数据 MyApi添加一个获取新闻列表的方法 ...
- (仿头条APP项目)8.新闻详情页面实现和butterknife插件使用
文章目录 butterknife插件使用 导入依赖 下载插件 使用 新闻详情页面显示 效果图 实现思路 具体实现 布局 数据库添加收藏表 新闻详情页面具体业务逻辑实现 详情页面跳转 效果图 具体实现步 ...
- (仿头条APP项目)2.主界面按钮切换Fragment页面
文章目录 主界面按钮切换Fragment页面 效果展示 框架结构 xml视图 主视图 选择器和style java代码模块 创建4个Fragment 1.绑定按钮选择事件 2.初始化和用HashMap ...
- (仿头条App项目)9.视频列表页面实现
文章目录 视频列表页面实现 效果图 相关布局 功能实现 引入第三方视频库插件 从服务端获取数据 显示 滚动播放功能实现 视频列表页面实现 效果图 相关布局 视频VideoFragment页面放一个Li ...
- (仿头条APP项目)6.点击过的新闻列表文字变灰和下拉刷新与滚动加载新闻数据
文章目录 一.点击过的新闻列表文字变灰 效果图 实现思路 导入ormlite数据库类依赖 利用ormlite创建数据库和表 创建数据库类MyDbHelper 创建数据库中的新闻实体类NewInfo 页 ...
- (仿头条APP项目)3.二级页面首页的ViewPager页面切换
文章目录 二级页面首页的ViewPager页面切换 效果展示 代码实现 创建几个三级页面Fragment视图 ViewPager的Fragment数据丢失问题 创建fragment_home视图文件 ...
- (仿头条APP项目)1.app载入界面相关功能实现
app载入界面相关功能实现 模块功能 1.设置页面布局 2.初始化视频播放 //控制是否跳到主界面private boolean isjump = false;private VideoView vi ...
- 头条App项目测试实战(二)App手工测试流程以及需求分析与评审
熟悉头条App项目步骤: 业务特性 用户与角色 组织架构图 技术栈 头条App测试流程(一次迭代) 测试流程 需求分析与评审 编写测试计划(测试方案) 设计测试用例与评审 执行测试用例与缺陷跟踪 编写 ...
最新文章
- Android证书通过keytool获取sha1、sha256、MD5
- python3最好的书籍推荐-推荐几本Python3相关书籍?最好分一下基础、进阶、高级...
- python下载安装教程3.8.0-Python3.8下载
- GitLab服务器迁移
- 搭建Redis服务器
- 如何批量转.jpg/.bmp图片
- Go出现警告struct doesn‘t have any exported fields, nor custom marshaling
- [转]Flex 中的皮肤
- 终于填了一个大坑:Python中如何处理《牛津高阶英汉词典》编码通不过问题(解决“UnicodeEncodeError”错误)
- CSDN博客放阿里妈妈广告代码的方法
- 在计算机中有什么作用,内存是什么在电脑中有什么作用
- 最新人工智能GPT-4免费简单使用教程
- 2018.09.26朴素贝叶斯算法研究日志
- m4v格式如何转换mp4?分享m4v转换mp4的方法
- AI围棋学习之路一----棋盘和落子的类构建
- 外汇天眼:Axi收回在RGT Capital的全部控制权,Eurotrader获得FCA牌照
- FileUpload解析
- 项目质量管理-质量控制工具技术:七种基本质量工具
- 易帅和夺帅,盛大与骏网
- 少儿编程老师在机器人教育中的前景
热门文章
- C++ Primer 5th笔记(chap 17 标准库特殊设施)regex_replace
- (chap2 简单的Http协议) HTTP方法(2)其他方法
- 并发安全Sync包的使用
- 数据结构解析——小白也能看懂的单链表
- RabbitMQ原理RabbitMQ各组件作用RabbitMQ使用场景
- python2和3的区别字符编码格式上下文管理is和==的区别
- 2020-10-27(dex文件解析)
- 005 NsPack 1.4 之附加数据初探
- 15、修改和删除触发器(DROP TRIGGER)
- Codeforces Round #486 (Div. 3)【完结】