關(guān)于監(jiān)聽虛擬按鍵中的返回鍵:activity和fragmentActivity中只需要重寫onTouchEvent或者onBackPressed方法即可笨腥。但是fragment中沒有這兩個方法废士,所以并不能通過重寫來監(jiān)聽back鍵跃巡。
所以我通過回調(diào)來實(shí)現(xiàn)了該方法的監(jiān)聽涂籽。
項(xiàng)目地址: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中實(shí)現(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;
}
/**
* 用于返回是否需要實(shí)現(xiàn)監(jiān)聽
*/
public boolean onBackPressed() {
if(判斷條件) {
return true;//監(jiān)聽back鍵,用于處理自己的點(diǎn)擊事件
}
return false;//原生back效果
}
最后再返回承接fragment的Activity中處理點(diǎn)擊事件
MainActivity.java
@Override
public void onBackPressed() {
if (fragment != null && ((FragmentTwo) fragment).onBackPressed()) {
//實(shí)現(xiàn)具體的點(diǎn)擊效果
} else {
super.onBackPressed();
}
}
效果圖:
fragment中監(jiān)聽back鍵的效果圖