android學(xué)習(xí)筆記:Fragment中監(jiān)聽返回鍵

關(guān)于監(jiān)聽虛擬按鍵中的返回鍵:activity和fragmentActivity中只需要重寫onTouchEvent或者onBackPressed方法即可。但是fragment中沒有這兩個方法,所以并不能通過重寫來監(jiān)聽back鍵。

所以我通過回調(diào)來實現(xiàn)了該方法的監(jiān)聽。

項目地址:https://github.com/chengxp/BackKeyWithFragment

代碼目錄結(jié)構(gòu):

代碼目錄結(jié)構(gòu)

首先定義一個接口類:
也可以在需要監(jiān)聽back鍵的fragment中直接定義這個接口,但為了方便所有的fragment都可以用到,我這邊是直接創(chuàng)建了一個接口類。

IBackInterface.java

public interface IBackInterface {    void setSelectedFragment(Fragment fragment);}

然后在承接fragment的Activity中實現(xiàn)這個接口:
MainActivity.java

public class MainActivity extends AppCompatActivity implements IBackInterface{
    private Fragment fragment; //用于傳遞監(jiān)聽back鍵的fragment
    ...
    @Override
    public void setSelectedFragment(Fragment fragment) {    
        this.fragment = fragment;
    }

再到需要監(jiān)聽back鍵的fragment中
FragmentTwo.java

private IBackInterface backInterface;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {    
        ...    
        backInterface = (IBackInterface)getActivity();  
        backInterface.setSelectedFragment(this);//將fragment傳遞到Activity中 
        return view;
    }
/**
* 用于返回是否需要實現(xiàn)監(jiān)聽
*/
public boolean onBackPressed() {
    if(判斷條件) {
        return true;//監(jiān)聽back鍵,用于處理自己的點擊事件
    }
    return false;//原生back效果
}

最后再返回承接fragment的Activity中處理點擊事件
MainActivity.java

@Override
    public void onBackPressed() {
        if (fragment != null && ((FragmentTwo) fragment).onBackPressed()) {
            //實現(xiàn)具體的點擊效果
        } else {
            super.onBackPressed();
        }
    }

效果圖:

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

相關(guān)閱讀更多精彩內(nèi)容

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