日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Fragment 使用 show 和 hide 的方式实现切换 以及切换的时候Fragment 生命周期

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。