[android] 新闻客户端主界面部分
2023-02-18 15:46:56 时间
当我们使用activity加fragment的时候,每个界面都要建立一个fragment,每个fragment里面都要重写onCreate(),onCreateView(),onActivityCreated(),方法,我们新建一个基类BaseFragment来重写这些方法
BaseFragment需要定义一个抽象方法initView(),用来初始化View对象,需要子类去实现,我们父类把LayoutInflater对象传进去
BaseFragment需要定义一个抽象方法initData(),用来初始化数据,需要子类去实现
package com.qingguow.news.fragment; import android.content.Context; 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; /** * 基础类 * @author taoshihan * */ public abstract class BaseFragment extends Fragment { public Context context; @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); initData(savedInstanceState); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); context=getActivity(); } @Override @Nullable public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view=initView(inflater); return view; } /** * 初始化View对象 * @param inflater * @return */ public abstract View initView(LayoutInflater inflater); /** * 初始化数据 * @param Bundle * @return */ public abstract void initData(Bundle savedInstanceState); }
主Fragment里实现Banner轮播
在fragment_index.xml布局文件中添加节点<android.support.v4.view.ViewPager />
获取ViewPager对象,通过findViewById()方法
调用ViewPager对象的setAdapter()方法,设置适配器,参数:PagerAdapter对象
使用匿名内部类的方式实现抽象方法,getCount(),isViewFromObject(),instantiateItem(),destroyItem()
重写getCount()方法,返回轮播的个数
重写isViewFromObject()方法,返回布尔值,
重写instantiateItem()方法,将当前view对象添加到ViewGroup对象,返回当前对象
重写destroyItem()方法,从当前container中删除指定位置(position)的View
package com.qingguow.news.fragment; import java.util.ArrayList; import java.util.List; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.qingguow.news.R; /** * 首页 * @author taoshihan * */ public class IndexFragment extends BaseFragment { private List<View> banners; @Override public View initView(LayoutInflater inflater) { View view=inflater.inflate(R.layout.fragment_index, null); //banner部分 banners=new ArrayList<>(); TextView tv=new TextView(context); tv.setText("测试"); banners.add(tv); TextView tv2=new TextView(context); tv2.setText("测试2"); banners.add(tv2); ViewPager vp=(ViewPager) view.findViewById(R.id.vp_banner); vp.setAdapter(new PagerAdapter(){ @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(banners.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(banners.get(position)); return banners.get(position); } @Override public int getCount() { return banners.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0==arg1; } }); return view; } @Override public void initData(Bundle savedInstanceState) { // TODO Auto-generated method stub } }
相关文章
- 记一次 .NET 某桌面奇侠游戏 非托管内存泄漏分析
- 2021 VDC :vivo 互联网服务亿级用户的技术架构演进之路
- vivo浏览器的快速开发平台实践-总览篇
- 字节码引用检测原理与实战
- vivo 敏感词匹配系统的设计与实践
- Redis线程模型的前世今生
- 服务API版本控制设计与实践
- Chrome 插件特性及实战场景案例分析
- vivo统一告警平台设计与实践
- 如何“拼”出一个页面-游戏中心模块化实践
- 深入剖析 RocketMQ 源码 - 消息存储模块
- vivo 全球商城:商品系统架构设计与实践
- 深入剖析Redis客户端Jedis的特性和原理
- 高并发场景下JVM调优实践之路
- 你分库分表的姿势对么?——详谈水平分库分表
- 高效动画实现原理-Jetpack Compose 初探索
- Redis大集群扩容性能优化实践
- 深入剖析 Spring WebFlux
- 设计模式如何提升 vivo 营销自动化业务扩展性 | 引擎篇01
- 深入理解Netty---从偶现宕机看Netty流量控制