android-Fragment-使用hide和show和onHiddenChanged切換

爲了節約資源,現在很多 app 採用了 replace() 方法來實現碎片的切換,但是在這種情寬下,如果不講之前的碎片雅茹棧中,就無法避免之前碎片回隨之銷燬,所以我們採用 hide() 和 show() 方法來實現碎片的切換。

實現效果

效果圖項目地址--https://github.com/FishInWater-1999/android-SignInSystem


這裏不講廢話直接給出最佳方案

首先,定義四個成員

private Fragment mContent = new Fragment();// 記錄下當前碎片 由於替換

private Fragment mPerson;
private Fragment mRanking;
private Fragment mSummary;
private FragmentTransaction transaction;

其次,在 OnCreate() 方法中,對他們進行初始化

mPerson = new Personal();
mRanking = new Ranking();
mSummary = new Summary();
fragmentManager = getSupportFragmentManager();
mContent = mRanking;
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(R.id.fragment, mContent).commit();
navigation.setSelectedItemId(R.id.navigation_home);

最後,在按鈕點擊時調用

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.navigation_home:
                switchContent(mPerson);
                return true;
            case R.id.navigation_dashboard:
                switchContent(mRanking);
                return true;
            case R.id.navigation_ranking:
                switchContent(mSummary);
                return true;
        }
        return false;
    }
};
    private void switchContent(Fragment to) {
        if (mContent != to) {
            FragmentTransaction transaction = fragmentManager.beginTransaction();
            if (!to.isAdded()) { // 判斷是否被add過
                // 隱藏當前的fragment,將 下一個fragment 添加進去
                transaction.hide(mContent).add(R.id.fragment, to).commit();
            } else {
                // 隱藏當前的fragment,顯示下一個fragment
                transaction.hide(mContent).show(to).commit();
            }
            mContent = to;
        }

    }

完整代碼地址 --> 

點擊跳轉-- https://github.com/FishInWater-1999/android-SignInSystem/blob/master/app/src/main/java/com/example/joker/signinsystem/activities/MainActivity.java

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章