fragment監(jiān)聽返回鍵(webview回退上一個(gè)頁面)

1、創(chuàng)建自定義接口類

public interface BackHandleInterface {

void onSelectedFragment(BackHandleFragment backHandleFragment);

}


2、創(chuàng)建一個(gè)自定義Fragment類

public abstract class BackHandleFragmentextends BaseFragment{

private BackHandleInterfacebackHandleInterface;

? ? /**

? ? * 所有繼承BackHandledFragment的子類都將在這個(gè)方法中實(shí)現(xiàn)物理Back鍵按下后的邏輯

? ? * FragmentActivity捕捉到物理返回鍵點(diǎn)擊事件后會(huì)首先詢問Fragment是否消費(fèi)該事件

? ? * 如果沒有Fragment消息時(shí)FragmentActivity自己才會(huì)消費(fèi)該事件

? ? */

? ? public abstract boolean onBackPressed();

? ? @Override

? ? public void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

? ? ? ? if(getActivity()instanceof BackHandleInterface){

this.backHandleInterface = (BackHandleInterface)getActivity();

? ? ? ? }else{

throw new ClassCastException("Hosting Activity must implement BackHandledInterface");

? ? ? ? }

}

@Override

? ? public void onStart() {

super.onStart();

? ? ? ? backHandleInterface.onSelectedFragment(this);

? ? }

}

3、在fragment的容器Activity中

????????1)聲明變量屬性

? ? ? ? ?private BackHandleFragmentbackHandleFragment;

? ? ? ? 2)activity實(shí)現(xiàn)接口(implements BackHandleInterface),重寫回調(diào)方法

@Override

public void onSelectedFragment(BackHandleFragment backHandleFragment) {

this.backHandleFragment = backHandleFragment;

}

? ? ? ? 3)重寫onKeyDown()方法

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

//if判斷里面就調(diào)用了來自Fragment的onBackPressed()

? ? //一樣??!,如果onBackPressed是返回false,就會(huì)進(jìn)入條件內(nèi)進(jìn)行默認(rèn)的操作

? ? if(backHandleFragment ==null || !backHandleFragment.onBackPressed()){

if(getSupportFragmentManager().getBackStackEntryCount() ==0){

/**

? ? ? ? ? ? * 按返回鍵直接返回桌面,監(jiān)聽返回鍵,防止按了音量鍵也返回桌面

? ? ? ? ? ? */

? ? ? ? ? ? if (keyCode == KeyEvent.KEYCODE_BACK){

Intent intent =new Intent(Intent.ACTION_MAIN);

? ? ? ? ? ? ? ? intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

? ? ? ? ? ? ? ? intent.addCategory(Intent.CATEGORY_HOME);

? ? ? ? ? ? ? ? startActivity(intent);

return true;

? ? ? ? ? ? }

}

}

return super.onKeyDown(keyCode, event);

}

4、fragment繼承自定義fragemnt,重寫回調(diào)方法onBackPressed()

tip:因?yàn)槲业捻?xiàng)目中fragment是包含整個(gè)webview,需求是點(diǎn)擊返回后,webview如果可以返回上一個(gè)頁面就返回上一個(gè)頁面

@Override

public boolean onBackPressed() {

if (webView.canGoBack()){

webView.goBack();

return true;

? ? }else {

return false;

? ? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容