在我的应用程序中,我使用ViewPager
在活动中显示两个片段。
在其中一个片段中,我使用NavigationDrawer
。我想点击 onBackPress
关闭此NavigationDrawer
。
我在下面写了打开这个抽屉的代码:
reviewSerialFrag_DrawerLayout.openDrawer(Gravity.END);
我希望当我点击onBackPress时,它将使用以下代码关闭此抽屉:
reviewSerialFrag_DrawerLayout.closeDrawer(Gravity.END);
提问者,请提出当前的问题,
答案 0 :(得分:1)
onBackpress()
仅在片段中调用,如果您需要在片段中按回事件,则必须实施接口才能获得onBackPress()
回调。
活动:
public MyActivity extends AppCompatActivity{
private BackPressListener backPressListener;
@Override
public void onBackPressed() {
if (backPressListener != null) {
backPressListener.onActivityBackPress();
} else {
super.onBackPressed();
}
}
public void setBackPressListener(BackPressListener backPressListener) {
this.backPressListener = backPressListener;
}
public interface BackPressListener{
void onActivityBackPress();
}
}
在片段中:
public class MyFragment extends Fragment implements BackPressListener{
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((MyActivity)getActivity()).setBackPressListener(this);
}
@Override
public void onActivityBackPress() {
// handle your back press here.
reviewSerialFrag_DrawerLayout.closeDrawer(Gravity.END);
getActivity().onBackPressed();
}
@Override
public void onDestroy() {
super.onDestroy();
((MyActivity)getActivity()).setBackPressListener(null);
}
}
答案 1 :(得分:1)
我的解决方案:
创建BaseFragment.java:
mock_serial.return_value.read.return_value = 'hello'
然后通过此BaseFragment扩展您的片段,并在活动中 :
public class BaseFragment extends Fragment
{
public boolean onBackPressed()
{
return false;
}
}
在 yourFragment :
中@Override
public void onBackPressed()
{
if (!yourFragment.onBackPressed())
super.onBackPressed();
}
答案 2 :(得分:1)
根据AndroidX release notes,androidx.activity 1.0.0-alpha01
被发布并引入了ComponentActivity
,它是现有FragmentActivity
和AppCompatActivity
的新基类。此版本为我们带来了一个新功能:
您现在可以通过OnBackPressedCallback
注册addOnBackPressedCallback
来接收onBackPressed()
回调,而无需在活动中覆盖该方法。
答案 3 :(得分:0)
最好的解决方案是创建您的界面,并在Fragment中实现。
解决方案here : implement onBackpress in Fragment
int num;
if (scanf("%d", &num)==1) { // successfully read one valid integral value?
printf("you entered number %d:", num);
}
请参阅链接了解更多详情...... easy sample
答案 4 :(得分:0)
您可以保留抽屉打开的标志。当你覆盖onBackPressed()时,检查这个标志,如果是,则调用
reviewSerialFrag_DrawerLayout.closeDrawer(Gravity.END);
否则,请调用super.onBackPressed()或您需要的任何其他逻辑。