使用Fragment
使用Fragment
- Fragment的介绍
- Fragment的生命周期
- 创建Fragment
- 在Activity中添加Fragment
- 实例——川菜菜谱
Fragment的介绍
Fragment(碎片)是一种嵌入在Activity中的UI片段,它可以用来描述Activity中的一部分布局。如果Activity界面布局中的控件比较多比较复杂,那么Activity管理起来就比较麻烦,我们可以使用Fragment把屏幕划分成几个片段,进行模块化的管理,从而使程序更加合理和充分地利用的空间。
Fragment的生命周期
Activity生命周期中有5中状态,分别是启动状态、运行状态、暂停状态、停止状态和销毁状态。
因为Fragment是被嵌入到Activity中使用的,因此它的生命周期的状态是直接受其所属Activity的生命周期状态影响。
Fragment生命周期与Activity的生命周期十分相似。Fragment生命周期比Activity多了以下几个方法,具体如下:
- onAttach():Fragment和Activity建立关联时调用
- onCreateView():Fragment创造视图时调用
- onActivityCreate():Fragment相关联的Activity已经创建完成时调用
- onDestroyView():Fragment关联的视图被移除时调用
- onDetach():Fragment和Activity解除关联时调用
创建Fragment
public class NewsListFragment extends Fragment{public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){View v = inflater.inflate(R.layout.fragment,container,false);return v;}
}
上述代码重写了Fragment和onCreateView()方法,并在该方法中通过LayoutInflater的inflate()方法将布局文件fragment.xml动态加载Fragment中
在Activity中添加Fragment
Fragment创建完成后并不能单独使用,还需要将Fragment添加到Activity中。在Activity中添加Fragment有两种方式:
- 在布局文件中添加Fragment
在Activity引用的布局文件中添加Fragment时,需要使用标签,该标签与其他控件的标签类似,但必须指定android:name属性,其属性值为Fragment的全路径名称。在LinearLayout布局中添加NewListFragment代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
>
<fragmentandroid:name="cn.itcast.NewListFragment"android:id="@+id/newslist"android:layout_width="match_parent"android:layout_height="match_parent"/>
</LinearLayout>
- 在Activity中动态加载Fragment
当Activity运行时,也可以将Fragment动态添加到Activity中,具体步骤如下:
(1)创建一个Fragment的实例对象
(2)获取FragmentManager的实例
(3)开启FragmentTransaction
(4)向Activity的布局容器中添加Fragment
(5)通过commit()方法提交事务
在Activity中添加Fragment的代码如下:
public class MainActivity extends Activity{protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);NewsListFragment fragment = new NewsListFragment();//实例化Fragment对象FragmentManager fm = getFragmentManager();//获取FragmentManager实例FragmentTransaction beginTransaction = fm.beginTransaction();//开启FragmentTransactionbeginTransaction.replace(R.id.ll,fragment);//添加一个FragmentbeginTransaction.commit();//提交事务}
}
实例——川菜菜谱
创建工程
创建一个名为SichuanCuisine的应用程序放置界面控件
放置界面控件
创建两个Fragment的布局文件
创建川菜列表Item界面
创建ContentFragment
ContentFragment类继承自Fragment,在该类中获取界面控件并将菜品做法的数据显示在控件上
通过setText()方法将获取的Activity中设置的菜品做法数据信息显示到界面控件上,创建一个initView()方法,在该方法中获取菜品做法信息的控件
- 创建MenuFragment
MenuFragment类继承自Fragment,在该类中实现显示川菜列表的信息,点击列表Item,在界面右侧会出现对应菜品的做法信息
通过setOnItemClickListener()方法为列表中的Item添加点击事件的监听器,在该监听器中重写onItemClick()方法,在onItemClick()方法中首先通过getActivity()方法获取Activity的实例对象,接着通过该对象的getFragmentManager()方法获取FragmentManager的实例对象,最后通过findFragmentById()方法获取到ContentFragment对象listFragment,并调用setText()方法设置点击的Item对应的菜品做法信息 - 编写MAinActivity
在MAinActivity中将MenuFragment与ContentFragment添加到MAinActivity界面上
通过replace()方法将ContentFragment和MenuFragment添加到对应的布局中
使用Fragment相关推荐
- Fragment之间传递数据的方式
1.直接调用另一个Fragent对象的方法,两个Fragment之间高度耦合 2.采取接口回调的方式进行数据传递.即在一个fragment中创建一接口以及接口对应的set方法,在另一个fagment中 ...
- Android Fragment 调用宿主Activity 里面的方法
方法 1 : 直接在Fragment 写 MainActivity main = (MainActivity) getActivity();main.xx; // xx 是 MainActivity ...
- java.lang.IllegalArgumentException: No view found for id 0x7f07005f (xx) for for fragment xxFragment
问题的原因的是自己修改id 的时候弄错了修改下id 就好了 我的是用activity 加载fragment 使用的地方如下 ,确定下面的id 是否在布局中 transaction.add(R.id.c ...
- overridePendingTransition 方法在Fragment 中使用
overridePendingTransition 方法在直接卸载Fragment 中无法识别 这个使用可以在前面添加getActivity 即可使用了 getActivity().override ...
- Fragment 使用 replace 的方式实现切换 以及切换的时候Fragment 生命周期
这个主要代码在activity里面 如下 public class ReplaceActivity extends AppCompatActivity implements View.OnClickL ...
- Fragment 使用 show 和 hide 的方式实现切换 以及切换的时候Fragment 生命周期
实现的效果如下图 主要的代码在activity 这里贴出来了 public class ShowActvity extends AppCompatActivity implements View.On ...
- ViewPager与Fragment结合使用,以及切换的时候Fragment 的生命周期
下面要做的效果图下图 首先我们创建一个适配器如下 public class FraPagerAdapter extends FragmentPagerAdapter {private List< ...
- Activity 数据传递给Fragment
下面说的宿主Activity 里面的Fragment 加入现在Fragment 里面 想使用Activity 里面的城市id 方法 1 使用set值 在Fragment 里面写一个set方法 在act ...
- Fragment 之间传递数据
关于Fragment 之间的跳转这里就不再说了 有兴趣的可以看我的这边博客 Fragment 跳转 ,,,点击查看把 Fragment 跳转首先先跳转到宿主的Activity 上 这里以在同一个Act ...
- Tablayout 多个界面使用一个fragment 的实例
这个主要还是adapter 里面 添加list 就行了 这里直接上代码吧 ,我刚写的demo 看的时候看adapter 就行了 布局代码: <?xml version="1.0&quo ...
最新文章
- append 换行_代码风格:答应我,让括号换行吧!!
- 160804、oracle查询:取出每组中的第一条记录
- 2018-03-02 GNUtls 对 TPM1.2 的原生支持
- scala 写入文件_Scala文件IO –写入文件,读取文件
- Atitit mybatis prblm n solu v1 u55 目录 1.1. 加载任意文职cfg	1 1.2. 根据dburl获取factory	1 1.3. Load any mapper
- python如何获取免费的可以商用的字体
- 参数整定类毕业论文文献有哪些?
- 沙盒生存游戏:打造世界Craft the World Mac中文版
- win10c盘扩容_如何给磁盘进行扩容/拆分/合并的操作?保姆级教学
- JAVA中获取文件MD5值的四种方法
- 谷歌AdMob广告接入(插屏广告)
- 阿里云RPA(机器人流程自动化)干货系列之五:业务流程梳理方法...
- 洁净厂房洁净度等级SICOLAB
- Pulling 1 repository Exception caught during execution of merge command
- MATLAB 2016a系统错误解决方案
- 计算机中的英语六级作文万能模板,英语六级作文的通用万能模板
- Protein Ising Model Problem
- 疯狂天才乔治·霍兹:17岁黑掉苹果,22岁搞垮索尼,还是特斯拉、谷歌最可怕的对手!...
- 柴油闪点不合格的原因
- 在 ASP.NET Core 中上传文件