在片段中使用后退按钮 Android
Using BackButton in Fragments Android
我想在 Fragments
中使用 BackButton
。我正在使用此代码来处理后退按钮:
@Override
public void onResume() {
super.onResume();
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){
if (idozit.num > 0) {
if (!pmenu.pauseopen) {
pmenu.BeingPaused(idozit.idozitomegy,nextlevel,0);
} else {
pmenu.continuegame();
}
}
if (idozit.num == 0) {
idozit.numnull(db);
}
//Toast.makeText(getActivity(), "hello1", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
}
当我点击 BackButton 时,这段代码工作正常,但如果再次点击 BackButton,应用程序会从 MainActivity
调用 onBackPressed
方法。我不知道为什么,但如果我在 onKey
方法中只使用 Toast
或 Log.d
之类的东西,那么我可以再次单击它。
我想说 pmenu
是一个简单的 class ,它只会停止音乐,让事情消失等等。似乎不知何故我总是坚持 class 。
你知道我做错了什么吗?
将最后一行的 false
替换为 true
并且在最后一行之前不需要 return true
一个更简洁的解决方案是让每个片段都使用一个名为 onBackPressed() 的方法实现一个接口,如下所示:
public interface FragmentInterface {
void onBackPressed();
}
然后,您覆盖 activity 中的 onBackPressed 调用当前片段的 onBackPressed(我假设您有获取 currentFragment 的方法)
@Override
public void onBackPressed(){
FragmentInterface currentfragment = getCurrentFragment();
currentfragment.onBackPressed();
}
当然,在你的片段中,实现的方法应该是这样的:
@Override
public void onBackPressed() {
if (idozit.num > 0) {
if (!pmenu.pauseopen) {
pmenu.BeingPaused(idozit.idozitomegy,nextlevel,0);
} else {
pmenu.continuegame();
}
}
if (idozit.num == 0) {
idozit.numnull(db);
}
//Toast.makeText(getActivity(), "hello1", Toast.LENGTH_SHORT).show();
}
我想在 Fragments
中使用 BackButton
。我正在使用此代码来处理后退按钮:
@Override
public void onResume() {
super.onResume();
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){
if (idozit.num > 0) {
if (!pmenu.pauseopen) {
pmenu.BeingPaused(idozit.idozitomegy,nextlevel,0);
} else {
pmenu.continuegame();
}
}
if (idozit.num == 0) {
idozit.numnull(db);
}
//Toast.makeText(getActivity(), "hello1", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
}
当我点击 BackButton 时,这段代码工作正常,但如果再次点击 BackButton,应用程序会从 MainActivity
调用 onBackPressed
方法。我不知道为什么,但如果我在 onKey
方法中只使用 Toast
或 Log.d
之类的东西,那么我可以再次单击它。
我想说 pmenu
是一个简单的 class ,它只会停止音乐,让事情消失等等。似乎不知何故我总是坚持 class 。
你知道我做错了什么吗?
将最后一行的 false
替换为 true
并且在最后一行之前不需要 return true
一个更简洁的解决方案是让每个片段都使用一个名为 onBackPressed() 的方法实现一个接口,如下所示:
public interface FragmentInterface {
void onBackPressed();
}
然后,您覆盖 activity 中的 onBackPressed 调用当前片段的 onBackPressed(我假设您有获取 currentFragment 的方法)
@Override
public void onBackPressed(){
FragmentInterface currentfragment = getCurrentFragment();
currentfragment.onBackPressed();
}
当然,在你的片段中,实现的方法应该是这样的:
@Override
public void onBackPressed() {
if (idozit.num > 0) {
if (!pmenu.pauseopen) {
pmenu.BeingPaused(idozit.idozitomegy,nextlevel,0);
} else {
pmenu.continuegame();
}
}
if (idozit.num == 0) {
idozit.numnull(db);
}
//Toast.makeText(getActivity(), "hello1", Toast.LENGTH_SHORT).show();
}