close

因為需要在Fragment中讓使用者按了返回鍵後實現某些功能

所以就必須在Fragment裡面直接捕捉到返回鍵

有四個步驟就可以實現了~~

Step 1:

建立一個"interface"

public interface FragmentBackHandler {
    boolean onBackPressed();
}

Step 2:

建立一個"class"

public class BackHandlerHelper {

    public static boolean handleBackPress(FragmentManager fragmentManager) {
        List<Fragment> fragments = fragmentManager.getFragments();

        if (fragments == null) return false;

        for (int i = fragments.size() - 1; i >= 0; i--) {
            Fragment child = fragments.get(i);

            if (isFragmentBackHandled(child)) {
                return true;
            }
        }

        if (fragmentManager.getBackStackEntryCount() > 0) {
            fragmentManager.popBackStack();
            return true;
        }
        return false;
    }

    public static boolean handleBackPress(Fragment fragment) {
        return handleBackPress(fragment.getChildFragmentManager());
    }

    public static boolean handleBackPress(FragmentActivity fragmentActivity) {
        return handleBackPress(fragmentActivity.getSupportFragmentManager());
    }


    public static boolean isFragmentBackHandled(Fragment fragment) {
        return fragment != null
                && fragment.isVisible()
                && fragment.getUserVisibleHint() //for ViewPager
                && fragment instanceof FragmentBackHandler
                && ((FragmentBackHandler) fragment).onBackPressed();
    }
}

建立完之後會有這兩個類別

 

 

Step 3:

在你的Fragment裡面要 implements "FragmentBackHandler"

然後就必須要繼承這個 function

@Override
public boolean onBackPressed() {
    return BackHandlerHelper.handleBackPress(this);
}

 

Step 4:

在Fragment的Activity裡面也要記得繼承

@Override
public void onBackPressed() {
    if (!BackHandlerHelper.handleBackPress(this)) {
        super.onBackPressed();
    }
}

 

這樣就可以在Fragment裡面補捉到返回鍵你想要做的事情

arrow
arrow

    小小工程師 發表在 痞客邦 留言(0) 人氣()