[android] 新闻客户端主界面部分
2023-02-18 15:47:09 时间
当我们使用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 } }
相关文章
- [编程] C语言循环结构计算π的值
- [Go] Golang中的面向对象
- [Go] 分页计算页码的主要逻辑
- [Go] gocron源码阅读-go语言中数组和切片的字面值初始化语法
- [Linux] 纯净ubuntu快速搭建宝塔面板
- 解读顶会ICDE’21论文:利用DAEMON算法解决多维时序异常检测问题
- 云小课|VMware备份上云学习专列来了,快加入吧~
- ReScript 与 TypeScript,谁是前端圈的“当红辣子鸡”
- 50亿海量数据如何高效存储和分析? GaussDB (for Cassandra) 3个秘诀搞定
- 解读顶会CIKM'21 Historical Inertia论文
- 云小课|细数那些VMware虚拟机的恢复招式
- IoT边缘,你究竟是何方神圣?
- 深入分析3种线程池执行任务的逻辑方法
- 宝藏昇腾AI应用推荐!CANN带你体验黑白图像自动上色的快乐~
- 解读知识蒸馏模型TinyBert
- 鸿蒙轻内核的得力助手:带你掌握4种内存调试方法
- 从保证业务不中断,看网关的“前世今生”
- 为了让医院把医护还给患者,他们用了这个…
- 训练千亿参数模型的法宝,昇腾CANN异构计算架构来了~
- 数仓出现“wait in ccn queue”的时候,怎么迅速定位处理?