3 回答

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
onBackPressed
FragmentTransaction
addToBackStack
@Overridepublic void onBackPressed() { int count = getSupportFragmentManager().getBackStackEntryCount(); if (count == 0) { super.onBackPressed(); //additional code } else { getSupportFragmentManager().popBackStack(); }}

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
Java解決方案
public interface IOnBackPressed { /** * If you return true the back press will not be taken into account, otherwise the activity will act naturally * @return true if your processing has priority if not false */ boolean onBackPressed();}
public class MyActivity extends Activity { @Override public void onBackPressed() { Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.main_container); if (!(fragment instanceof IOnBackPressed) || !((IOnBackPressed) fragment).onBackPressed()) { super.onBackPressed(); } } ...}
public class MyFragment extends Fragment implements IOnBackPressed{ @Override public boolean onBackPressed() { if (myCondition) { //action not popBackStack return true; } else { return false; } }}
Kotlin解
1-創(chuàng)建接口
interface IOnBackPressed { fun onBackPressed(): Boolean}
2-準(zhǔn)備你的活動(dòng)
class MyActivity : AppCompatActivity() { override fun onBackPressed() { val fragment = this.supportFragmentManager.findFragmentById(R.id.main_container) (fragment as? IOnBackPressed)?.onBackPressed()?.not()?.let { super.onBackPressed() } }}
3-在目標(biāo)片段中實(shí)現(xiàn)
class MyFragment : Fragment(), IOnBackPressed { override fun onBackPressed(): Boolean { return if (myCondition) { //action not popBackStack true } else { false } }}

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
BaseActivity
創(chuàng)建類接口 OnBackPressedListener
public interface OnBackPressedListener { public void doBack();}
創(chuàng)建實(shí)現(xiàn)以下技能的類: OnBackPressedListener
public class BaseBackPressedListener implements OnBackPressedListener { private final FragmentActivity activity; public BaseBackPressedListener(FragmentActivity activity) { this.activity = activity; } @Override public void doBack() { activity.getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); }}
從現(xiàn)在開始,我們將編寫我們的代碼。 BaseActivity
及其碎片 在類的頂部創(chuàng)建私有偵聽器 BaseActivity
protected OnBackPressedListener onBackPressedListener;
創(chuàng)建方法來設(shè)置偵聽器 BaseActivity
public void setOnBackPressedListener(OnBackPressedListener onBackPressedListener) { this.onBackPressedListener = onBackPressedListener;}
在覆蓋 onBackPressed
實(shí)現(xiàn)這樣的東西 @Overridepublic void onBackPressed() { if (onBackPressedListener != null) onBackPressedListener.doBack(); else super.onBackPressed();
在你的碎片里 onCreateView
您應(yīng)該添加我們的偵聽器 @Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { activity = getActivity(); ((BaseActivity)activity).setOnBackPressedListener(new BaseBackPressedListener(activity)); View view = ... ;//stuff with view return view;}
- 3 回答
- 0 關(guān)注
- 514 瀏覽
添加回答
舉報(bào)