FragmentTransaction使用全解
前言
之前已經寫過用Fragment做主介面以及Fragment與Activity通訊的文章。兩篇文章如下:
ndroid viewpager+fragment做主介面(超容易理解的demo!)
android Fragment與Activity互動,互相發資料(附圖詳解)
對於Fragment還剩FragmentTransaction沒有具體講到,此篇文章就講一下FragmentTransaction的主要用法,也是對之前的回顧。
(原始碼在文章結尾)
簡單用法
如上是Fragment的簡單使用演示,主要程式碼如下:
btnMainOne =(Button)findViewById(R.id.btn_main_one);
btnMainOne.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mFragmentTransaction=getFragmentManager().beginTransaction();
mFragmentTransaction.replace(R.id.fl_main,new FragmentOne());
//設定簡單的過度動畫
mFragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
mFragmentTransaction.commit();
}
});
FragmentTransaction使用注意
每次在使用FragmentTransaction的時候都需要重新獲取,每一個FragmentTransaction只能夠commit()一次。
用程式碼表示下錯誤使用:
btnMainOne =(Button)findViewById(R.id.btn_main_one);
mFragmentTransaction=getFragmentManager().beginTransaction();
btnMainOne.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mFragmentTransaction.replace(R.id.fl_main,new FragmentOne());
//設定簡單的過度動畫
mFragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
mFragmentTransaction.commit();
}
});
錯誤使用中把FragmentTransaction的獲取挪到了點選事件之前,這樣在點選第二次的時候就會出現錯誤。
新增到返回棧
在使用Fragment的時候,我們經常會有一個這樣的需求,就是需要通過返回鍵讓fragment回覆到之前的一個狀態。使用FragmentTransaction就能很容易做到,效果如下:
其實主要就是通過addToBackStack()這個方法,在commit()之前使用,能夠保留commit之前的狀態,在使用返回鍵時,能夠回到之前的狀態。
具體程式碼如下:
這裡寫程式碼片
private void initViewTwo() {
//主要邏輯在MainActivity的onClick中
btnMainOne =(Button)findViewById(R.id.btn_main_one);
btnMainOne.setOnClickListener(this);
btnMainTwo =(Button)findViewById(R.id.btn_main_two);
btnMainTwo.setOnClickListener(this);
btnMainThree =(Button)findViewById(R.id.btn_main_three);
btnMainThree.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//每次點選事件都會重新獲取FragmentTransaction
mFragmentTransaction=getFragmentManager().beginTransaction();
switch (v.getId()){
case R.id.btn_main_one:
if(fraOne==null){
fraOne=new FragmentOne();
}
mFragmentTransaction.replace(R.id.fl_main,fraOne);
mFragmentTransaction.addToBackStack(null);//新增fragment到返回棧
mFragmentTransaction.commit();
break;
case R.id.btn_main_two:
if(fraTwo==null){
fraTwo=new FragmentTwo();
}
mFragmentTransaction.replace(R.id.fl_main,fraTwo);
mFragmentTransaction.addToBackStack(null);//新增fragment到返回棧
mFragmentTransaction.commit();
break;
case R.id.btn_main_three:
if(fraThree==null){
fraThree=new FragmentThree();
}
mFragmentTransaction.replace(R.id.fl_main,fraThree);
mFragmentTransaction.addToBackStack(null);//新增fragment到返回棧
mFragmentTransaction.commit();
break;
}
}
原始碼地址:
相關文章
- FragmentTransaction的replace方法Fragment
- oracle遊標使用全解Oracle
- Oracle 遊標使用全解Oracle
- Android 進階17:Fragment FragmentManager FragmentTransaction 深入理解AndroidFragment
- vue-cli 3.0 使用全過程講解Vue
- vue-cli3.0使用全過程講解Vue
- Mybatis全解MyBatis
- 機器學習全解機器學習
- java反射全解Java反射
- WebSocket全瞭解Web
- exp 匯出 全庫,全使用者
- RocketMQ系列:rocketmq運維控制檯使用詳解(全網獨家)MQ運維
- 詳解Oracle建立使用者許可權全過程Oracle
- 很全很全的JavaScript的模組講解JavaScript
- javascript函式全解JavaScript函式
- Android動畫全解Android動畫
- iOS-Block全解iOSBloC
- java Classpath全解(轉)Java
- elasticsearch APM功能全解 一Elasticsearch
- FTP 資訊程式碼全解FTP
- CentOS7無法使用Tab鍵補全命令的解決方法CentOS
- Excel使用技巧大全(超全)Excel
- XtraBackup工具詳解 Part 5 使用innobackupex對資料庫進行全備資料庫
- iOS 圖解一個功能很全的視訊播放器的使用iOS圖解播放器
- React 16 新特性全解(上)React
- 【Vue全解0】Vue例項Vue
- 16.ReentrantLock全解讀ReentrantLock
- 《圖解機器學習》全書程式碼圖解機器學習
- 閃回技術全瞭解
- Linux監控命令全解Linux
- 阿里上市全解讀——資訊圖阿里
- WebSphere效能調優全講解Web
- ABC346 全場題解
- Springmvc全註解開發SpringMVC
- Ioc之全註解開發
- 微信Mars——xlog使用全解析
- 全鏈路風控解決方案深度解讀
- webpack loader配置全流程詳解Web