fragment与viewPaper的使用

实现点击切换fragment和滑动切换fragment

  1. 效果图如下:

   

实现过程—核心代码:

对底部栏实现按下时,能够改变背景颜色,文字颜色以及更改图标

以第一个提示的button为例子:

要注意的几点是:

(1)      通过drawbleTop属性,将图片放在button的上方,以便下方显示文字

(2)      我们先来看button的背景设置btn_tip_msg文件:

如上代码:我们可以看到首先是一个selector,表示为选择,然后第一个item,设置了state_pressed属性为false,即按钮未被按下时的状态,同样我们再设置state_pressed为true时的颜色,那么就可以控制button的背景颜色变化了。

(3)      紧接着是button中的图片的改变,设置文件如下:

也是很简单的的一个state_pressed属性来设置

(4)      最后,我们再来看button中文字颜色的改变:

从界面上,可以看出中间的那部分为我们要设置的fragment,那么我们要实现通过滑动来切换fragment,那么这时候中间的这部分要使用viewPaper的控件:

定义完一些主要,困难的布局后,我们现在开始开始实现java文件:

(1)    我们知道其实界面中是4个fragment在切换,所以我们先分别定义4个fragment布局文件和Java文件:

     

(2)我们来看下其中的的一个fragment.java文件:

其实很简单,就是在onCreateView上定义一个view,然后让这个view去加载其对应的的布局文件,然后返回即可。

(3)为了实现滑动切换fragment,我们使用了viewpager去加载fragment,自然我们也要为定义viewpaper定义一个适配器,然后绑定这个适配器,其实类似listview的使用方法。那么官方提供了一个专门加载fragment的适配器FragmentPagerAdapter

我们来看下它具体是如何实现的:

我们分别定义了4个不同的fragment,并在类的构造函数里内初始化了,然后该类还包含了两个函数,一个是getCount(),表示fragment的个数,我们这里是4个,所以返回4个即可。另一个函数getItem()表示的返回当前fragment的位置,那么根据返回的位置,我们设置为对应的fragment,再返回即可。

(5)最后我们来看到MainActivity的实现:

这一部分主要是初始化数据,主要看到的是下面这一段:

接下来我们再看到4个button的点击事件:实际上是很简单,只要把对应的fragment的位置传入到viewPager中即可。

最后,我们来看到滑动的监听事件:实现起来也是很简单,跟上面的button点击事件一样,不过这里要值得注意的是state的含义。

至此,主要的问题就解决了。

时间: 2024-08-04 18:11:12

fragment与viewPaper的使用的相关文章

Android 导航条效果实现(六) TabLayout+ViewPager+Fragment

TabLayout 一.继承结构 public class TabLayout extends HorizontalScrollView java.lang.Object ? android.view.View ? android.view.ViewGroup ? android.widget.FrameLayout ? android.widget.HorizontalScrollView ? android.support.design.widget.TabLayout 二.TabLayou

安卓性能优化之Activity和Fragment通过onSaveInstanceState()保存和恢复数据

Activity和Fragment 都有自己的生命周期,而且很类似.Fragment比Activity多了onAttach()和onCreateView()这些方法.整体它们两者是一样的周期,都会经历从创建视图( onCreate(),onCreateView(),onStart() )到暂停( onPause(), onStop() ) 到重新返回( onResume() ) 到最后销毁( onDetroyView(), onDestroy() ) 这些方法. 之前有提过,熟悉组件的这些生命周

fragment跳转

activity的布局代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match

FragmentTabHost切换Fragment避免重新加载Fragment,即重复调用Fragment的onCreateView

FragmentTabHost一切换再返回的时候Fragment就会调用onCreateView重新绘制页面,被这个问题坑了好久.刚开始也不知道是 FragmentTabHost还是Fragment的原因,网上找了好久也没找到解决办法.终于搜了好久还是找到了: 解决方法,在fragment onCreateView 里缓存View: private View rootView;// 缓存Fragment view @Override public View onCreateView(Layout

Fragment事务管理源码分析

概述 在Fragment使用中,有时候需要对Fragment进行add.remove.show.hide.replace等操作来进行Fragment的显示隐藏等管理,这些管理是通过FragmentTransaction进行事务管理的.事务管理是对于一系列操作进行管理,一个事务包含一个或多个操作命令,是逻辑管理的工作单元.一个事务开始于第一次执行操作语句,结束于Commit.通俗地将,就是把多个操作缓存起来,等调用commit的时候,统一批处理.下面会对Fragmeng的事务管理做一个代码分析 分

仿知乎程序 fragment的切换以及toolbar在不同页面下显示的menu不同

       我们在看知乎的时候,你会发现,首页,发现,关注,收藏,草稿这五项,你在点击之后进入到相应页面之后,侧滑菜单还在,你左侧滑一下,这个侧滑菜单还在,而提问,左滑屏幕,这个页面就没有,有点像返回上一页的感觉. 从操作来看,五页面应该是fragment之间的切换,而提问是单独的activity.     我们先从几个fragment入手,这里我们建立五fragment页,选择继承自android.support.v4.app.Fragment,因为这五个页面基本上都一样,就是简单的一个布局

对fragment的学习

一直对fragment一知半解,今天在运行一个项目的时候,有用到fragment,所以好好地复习了下fragment的知识: 1.fragment的生命周期: 2.在一个访问fragment中的资源可以在 public void onActivityCreated(Bundle savedInstanceState){}方法中 3. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle save

Android Acitivity 与 Fragment 声明周期

Activity的生命周期: (1)启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态. (2)当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行. Activity -> onFreeze() -> onPause() (3)当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态. (4)当前

Android - Fragment (三)不同Fragment之间的通信

在Fragment的java文件中,可以使用getActivity()来获得调用它的activity, 然后再找到另一个Fragment,进行通信 getActivity().getFragmentManager().findFragmentById(R.id.fragment_list); 但这样做耦合度太高,不方便后续的修改操作 Fragment与其附着的Activity之间的通信,都应该由Activity来完成 不能是多个Fragment之间直接通信 Fragment与其附着的Activi