1 Fragment中屏蔽back键
public class MyFragment extends Fragment
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//不响应back键,此时按下back键什么都不会发生
requireActivity().getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
}
});
}
}
2 Fragment中按下back键过滤
public class MyFragment extends Fragment
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//不响应back键,此时按下back键什么都不会发生
requireActivity().getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
if(shouldInterceptBackPress()){ //你自己定义的过滤函数
//按下back键后执行的操作
}else{
requireActivity().onBackPressed(); //按下back键后正常响应
}
}
});
}
}
3 Fragment中设置了ActionBar
Fragment还是正常处理
ActionBar actionBar = ((AppCompatActivity) requireActivity()).getSupportActionBar();
if (null != actionBar)
actionBar.setDisplayHomeAsUpEnabled(true);
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
switch (id) {
case android.R.id.home:
do {
requireActivity().onBackPressed(); //唯一需要注意的是这里触发requireActivity().getOnBackPressedDispatcher().addCallback中的代码
} while (false);
break;
}
}