package fan.fragmentdemo;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TextView;
import fan.fragmentdemo.fragment.OneFragment;
import fan.fragmentdemo.fragment.ThreeFragment;
import fan.fragmentdemo.fragment.TwoFragment;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//當前顯示的fragment
private static final String STATE_FRAGMENT_SHOW = "STATE_FRAGMENT_SHOW";
private TextView tvone;
private TextView tvtwo;
private TextView tvthree;
private FragmentManager fragmentManager;
private OneFragment fgOne;
private TwoFragment fgTwo;
private ThreeFragment fgThree;
private Fragment currentFragment = new Fragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.tvthree = (TextView) findViewById(R.id.tv_three);
this.tvtwo = (TextView) findViewById(R.id.tv_two);
this.tvone = (TextView) findViewById(R.id.tv_one);
fragmentManager = getSupportFragmentManager();
tvthree.setOnClickListener(this);
tvtwo.setOnClickListener(this);
tvone.setOnClickListener(this);
if (savedInstanceState != null) { // “內存重啟”時調用
//獲取“內存重啟”時保存的fragment名字
String saveName = savedInstanceState.getString(STATE_FRAGMENT_SHOW);
//從fragmentManager里面找到fragment
fgOne = (OneFragment) fragmentManager.findFragmentByTag(OneFragment.class.getName());
fgTwo = (TwoFragment) fragmentManager.findFragmentByTag(TwoFragment.class.getName());
fgThree = (ThreeFragment) fragmentManager.findFragmentByTag(ThreeFragment.class.getName());
//如果為空就默認操作
if(TextUtils.isEmpty(saveName)){
//解決重疊問題
fragmentManager.beginTransaction()
.show(fgOne)
.hide(fgTwo)
.hide(fgThree)
.commit();
//把當前顯示的fragment記錄下來
currentFragment = fgOne;
}else{
if(saveName.equals(fgOne.getClass().getName())){ //如果推出之前是OneFragment
//解決重疊問題
fragmentManager.beginTransaction()
.show(fgOne)
.hide(fgTwo)
.hide(fgThree)
.commit();
//把當前顯示的fragment記錄下來
currentFragment = fgOne;
}else if(saveName.equals(fgTwo.getClass().getName())){ //如果推出之前是TwoFragment
//解決重疊問題
fragmentManager.beginTransaction()
.show(fgTwo)
.hide(fgOne)
.hide(fgThree)
.commit();
//把當前顯示的fragment記錄下來
currentFragment = fgTwo;
}else{ //如果推出之前是ThreeFragment
//解決重疊問題
fragmentManager.beginTransaction()
.show(fgThree)
.hide(fgTwo)
.hide(fgOne)
.commit();
//把當前顯示的fragment記錄下來
currentFragment = fgThree;
}
}
}else{ //正常啟動時調用
fgOne = new OneFragment();
fgTwo = new TwoFragment();
fgThree = new ThreeFragment();
showFragment(fgOne);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
//“內存重啟”時保存當前的fragment名字
outState.putString(STATE_FRAGMENT_SHOW,currentFragment.getClass().getName());
super.onSaveInstanceState(outState);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.tv_one:
showFragment(fgOne);
break;
case R.id.tv_two:
showFragment(fgTwo);
break;
case R.id.tv_three:
showFragment(fgThree);
break;
}
}
//
// /**
// * 使用replace切換頁面
// * 顯示fragment
// */
// private void showFragment(Fragment fg){
//
// FragmentTransaction transaction = fragmentManager.beginTransaction();
// transaction.replace(R.id.content, fg);
// transaction.commit();
//
// }
//
// /**
// * 使用show() hide()切換頁面
// * 顯示fragment
// */
// private void showFragment(Fragment fg){
//
// FragmentTransaction transaction = fragmentManager.beginTransaction();
//
// //如果之前沒有添加過
// if(!fg.isAdded()){
// transaction
// .hide(currentFragment)
// .add(R.id.content,fg);
// }else{
// transaction
// .hide(currentFragment)
// .show(fg);
// }
//
// currentFragment = fg;
//
// transaction.commit();
//
// }
/**
* 使用show() hide()切換頁面
* 顯示fragment
*/
private void showFragment(Fragment fg){
FragmentTransaction transaction = fragmentManager.beginTransaction();
//如果之前沒有添加過
if(!fg.isAdded()){
transaction
.hide(currentFragment)
.add(R.id.content,fg,fg.getClass().getName()); //第三個參數為添加當前的fragment時綁定一個tag,即綁定fragment的類名
}else{
transaction
.hide(currentFragment)
.show(fg);
}
currentFragment = fg;
transaction.commit();
}
}
fragment的切換
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- 現在的App主頁設計,一般采用的是幾個按鈕加上不同的Fragment切換。這樣看起來層次很清晰,功能明確,用戶一目...
- 概述相信很多使用過 Fragment 的朋友都對判斷 Fragment 是否對用戶可見有此疑問,網上有很多文章也介...
- 項目中經常會用到ViewPager配合Fragment進行滑動視圖的實現,經常配合FragmentPagerAda...