Fragment 使用 show 和 hide 的方式实现切换 以及切换的时候Fragment 生命周期
生活随笔
收集整理的這篇文章主要介紹了
Fragment 使用 show 和 hide 的方式实现切换 以及切换的时候Fragment 生命周期
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實現的效果如下圖
主要的代碼在activity 這里貼出來了
public class ShowActvity extends AppCompatActivity implements View.OnClickListener {private HpFragment hpFragment;private FilmFragment filmFragment;private MeFragment meFragment;private TextView hpText;private TextView filmText;private TextView meText;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.show_activity_layout);hpText = findViewById(R.id.hp_text);hpText.setOnClickListener(this);filmText = findViewById(R.id.film_text);filmText.setOnClickListener(this);meText = findViewById(R.id.me_text);meText.setOnClickListener(this);initTab(0);}private void initTab(int i) {//開啟事務,fragment的控制是由事務來實現的FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();hideFragments(transaction);clearSelection();switch (i) {case 0:hpText.setTextColor(Color.RED);if (hpFragment == null) {hpFragment = new HpFragment();transaction.add(R.id.content, hpFragment);} else {transaction.show(hpFragment);}break;case 1:filmText.setTextColor(Color.RED);if (filmFragment == null) {filmFragment = new FilmFragment();transaction.add(R.id.content, filmFragment);} else {transaction.show(filmFragment);}break;case 2:meText.setTextColor(Color.RED);if (meFragment == null) {meFragment = new MeFragment();transaction.add(R.id.content, meFragment);} else {transaction.show(meFragment);}break;}transaction.commitAllowingStateLoss();}private void clearSelection() {hpText.setTextColor(Color.BLACK);filmText.setTextColor(Color.BLACK);meText.setTextColor(Color.BLACK);}private void hideFragments(FragmentTransaction transaction) {if (filmFragment != null) {transaction.hide(filmFragment);}if (hpFragment != null) {transaction.hide(hpFragment);}if (meFragment != null) {transaction.hide(meFragment);}}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.hp_text:initTab(0);break;case R.id.film_text:initTab(1);break;case R.id.me_text:initTab(2);break;}}
}
換個方式在來一遍代碼如下
?
public class OtherActivity extends AppCompatActivity implements View.OnClickListener {private HpFragment hpFragment;private FilmFragment filmFragment;private MeFragment meFragment;private TextView hpText;private TextView filmText;private TextView meText;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.show_activity_layout);hpText = findViewById(R.id.hp_text);hpText.setOnClickListener(this);filmText = findViewById(R.id.film_text);filmText.setOnClickListener(this);meText = findViewById(R.id.me_text);meText.setOnClickListener(this);addFragment();// 指定默認顯示第一個界面,可修改onClick(hpText);}private void addFragment() {//開啟事務,fragment的控制是由事務來實現的FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();if (hpFragment == null) {hpFragment = new HpFragment();transaction.add(R.id.content, hpFragment);}if (filmFragment == null) {filmFragment = new FilmFragment();transaction.add(R.id.content, filmFragment);}if (meFragment == null) {meFragment = new MeFragment();transaction.add(R.id.content, meFragment);}transaction.commitNow();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.hp_text:clearSelection();hpText.setTextColor(Color.RED);showFragment(hpFragment);break;case R.id.film_text:clearSelection();filmText.setTextColor(Color.RED);showFragment(filmFragment);break;case R.id.me_text:clearSelection();meText.setTextColor(Color.RED);showFragment(meFragment);break;}}private void showFragment(BaseFragment baseFragment) {hideAllFragment();if (baseFragment != null && baseFragment.isAdded()) {getSupportFragmentManager().beginTransaction().show(baseFragment).commitNow();}}protected void hideAllFragment() {List<Fragment> allFragment = getSupportFragmentManager().getFragments();if (allFragment.size() > 0) {for (Fragment fragment : allFragment) {if (fragment.isAdded()) {getSupportFragmentManager().beginTransaction().hide(fragment).commitNow();}}}}private void clearSelection() {hpText.setTextColor(Color.BLACK);filmText.setTextColor(Color.BLACK);meText.setTextColor(Color.BLACK);}
}
第一次進來的時候加載?fragment 的生命周期
由于時候使用的是show 再次切換Fragment的時候 就不再走Fragment的聲明周期了 而是 直接顯示了
如果想要切換fragment 之后之前的frament 走onPause 方法,這個時候就需要使用replace 方法
如果使用viewpager +fragment 實現 需要禁止viewpager 緩存了。
demo 地址
?
總結
以上是生活随笔為你收集整理的Fragment 使用 show 和 hide 的方式实现切换 以及切换的时候Fragment 生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 雅漾 薇姿 理肤泉 哪个牌子的防晒霜好用
- 下一篇: 英雄的黎明是谁写的呢?