文章目录

  • 父类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获取并解析服务器端数据相关推荐

  1. (仿头条APP项目)7.首页标签页完善和微头条页面设计实现

    文章目录 一.首页标签页完善 效果图 具体实现 二.微头条页面设计实现 效果图 实现思路 具体实现 布局 微头条页面实体类 业务逻辑代码 一.首页标签页完善 在之前已经把首页北京标签的新闻列表页面基本 ...

  2. (仿头条APP项目)5.列表页面设计实现

    文章目录 列表页面设计 效果图 具体实现 添加Glide依赖 添加主页面和两个列表布局 用GsonFormat快速创建NewListData实体类存放新闻列表数据 MyApi添加一个获取新闻列表的方法 ...

  3. (仿头条APP项目)8.新闻详情页面实现和butterknife插件使用

    文章目录 butterknife插件使用 导入依赖 下载插件 使用 新闻详情页面显示 效果图 实现思路 具体实现 布局 数据库添加收藏表 新闻详情页面具体业务逻辑实现 详情页面跳转 效果图 具体实现步 ...

  4. (仿头条APP项目)2.主界面按钮切换Fragment页面

    文章目录 主界面按钮切换Fragment页面 效果展示 框架结构 xml视图 主视图 选择器和style java代码模块 创建4个Fragment 1.绑定按钮选择事件 2.初始化和用HashMap ...

  5. (仿头条App项目)9.视频列表页面实现

    文章目录 视频列表页面实现 效果图 相关布局 功能实现 引入第三方视频库插件 从服务端获取数据 显示 滚动播放功能实现 视频列表页面实现 效果图 相关布局 视频VideoFragment页面放一个Li ...

  6. (仿头条APP项目)6.点击过的新闻列表文字变灰和下拉刷新与滚动加载新闻数据

    文章目录 一.点击过的新闻列表文字变灰 效果图 实现思路 导入ormlite数据库类依赖 利用ormlite创建数据库和表 创建数据库类MyDbHelper 创建数据库中的新闻实体类NewInfo 页 ...

  7. (仿头条APP项目)3.二级页面首页的ViewPager页面切换

    文章目录 二级页面首页的ViewPager页面切换 效果展示 代码实现 创建几个三级页面Fragment视图 ViewPager的Fragment数据丢失问题 创建fragment_home视图文件 ...

  8. (仿头条APP项目)1.app载入界面相关功能实现

    app载入界面相关功能实现 模块功能 1.设置页面布局 2.初始化视频播放 //控制是否跳到主界面private boolean isjump = false;private VideoView vi ...

  9. 头条App项目测试实战(二)App手工测试流程以及需求分析与评审

    熟悉头条App项目步骤: 业务特性 用户与角色 组织架构图 技术栈 头条App测试流程(一次迭代) 测试流程 需求分析与评审 编写测试计划(测试方案) 设计测试用例与评审 执行测试用例与缺陷跟踪 编写 ...

最新文章

  1. Android证书通过keytool获取sha1、sha256、MD5
  2. python3最好的书籍推荐-推荐几本Python3相关书籍?最好分一下基础、进阶、高级...
  3. python下载安装教程3.8.0-Python3.8下载
  4. GitLab服务器迁移
  5. 搭建Redis服务器
  6. 如何批量转.jpg/.bmp图片
  7. Go出现警告struct doesn‘t have any exported fields, nor custom marshaling
  8. [转]Flex 中的皮肤
  9. 终于填了一个大坑:Python中如何处理《牛津高阶英汉词典》编码通不过问题(解决“UnicodeEncodeError”错误)
  10. CSDN博客放阿里妈妈广告代码的方法
  11. 在计算机中有什么作用,内存是什么在电脑中有什么作用
  12. 最新人工智能GPT-4免费简单使用教程
  13. 2018.09.26朴素贝叶斯算法研究日志
  14. m4v格式如何转换mp4?分享m4v转换mp4的方法
  15. AI围棋学习之路一----棋盘和落子的类构建
  16. 外汇天眼:Axi收回在RGT Capital的全部控制权,Eurotrader获得FCA牌照
  17. FileUpload解析
  18. 项目质量管理-质量控制工具技术:七种基本质量工具
  19. 易帅和夺帅,盛大与骏网
  20. 少儿编程老师在机器人教育中的前景

热门文章

  1. C++ Primer 5th笔记(chap 17 标准库特殊设施)regex_replace
  2. (chap2 简单的Http协议) HTTP方法(2)其他方法
  3. 并发安全Sync包的使用
  4. 数据结构解析——小白也能看懂的单链表
  5. RabbitMQ原理RabbitMQ各组件作用RabbitMQ使用场景
  6. python2和3的区别字符编码格式上下文管理is和==的区别
  7. 2020-10-27(dex文件解析)
  8. 005 NsPack 1.4 之附加数据初探
  9. 15、修改和删除触发器(DROP TRIGGER)
  10. Codeforces Round #486 (Div. 3)【完结】