[英]How to implement onBackPressed for Android Fragment?
I want to implement custom onBackPressed methods for all my fragments which are included in my Main activity.我想为我的主要活动中包含的所有片段实现自定义 onBackPressed 方法。 But I am not getting a hook when my device back is pressed.
但是当我的设备被按下时,我没有钩住。 I tried to implement few stuffs available in SOF, but none of them work properly.
我试图在 SOF 中实现一些可用的东西,但它们都没有正常工作。 Please Help!
请帮忙!
I tried this in onCreateView:我在 onCreateView 中试过这个:
rootView.setFocusableInTouchMode(true);
rootView.requestFocus();
rootView.setOnKeyListener( new OnKeyListener()
{
@Override
public boolean onKey( View v, int keyCode, KeyEvent event )
{
if( keyCode == KeyEvent.KEYCODE_BACK)
{
return true;
}
return false;
}
} );
Use below code hopefully this code will help you.使用下面的代码希望此代码对您有所帮助。
rootView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
backFlag = backFlag++;
if (backFlag == 2) {
getActivity().finish();
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
backFlag = 0;
return true;
}
return false;
}
});
您可以使用新的 API。
activity?.onBackPressedDispatcher?.addCallback
Same issue here.同样的问题在这里。 I solve this by setting actionbar title to fragment and then check onBackPressed which fragment is currently visible by checking the title of ActionBar.
我通过将操作栏标题设置为片段来解决这个问题,然后通过检查操作栏的标题来检查当前可见的片段 onBackPressed。 Its not proper solution but it works for me perfectly.
它不是正确的解决方案,但它对我来说完美无缺。 if u have any question tell me.
如果你有任何问题,请告诉我。 Hope it works for u.
希望它对你有用。 Thanx
谢谢
public interface OnBackPressedListener {
boolean onBackPressed();
}
public interface OnBackPressedNotifier {
void registerOnBackPressedListener(OnBackPressedListener listener);
void unregisterOnBackPressedListener(OnBackPressedListener listener);
}
public class SampleActivity extends Activity implements OnBackPressedNotifier {
List<OnBackPressedListener> onBackPressedListeners = new ArrayList<>();
@Override
public void registerOnBackPressedListener(OnBackPressedListener listener) {
if (!onBackPressedListeners.contains(listener))
onBackPressedListeners.add(listener);
}
@Override
public void unregisterOnBackPressedListener(OnBackPressedListener listener) {
if(onBackPressedListeners.contains(listener))
onBackPressedListeners.remove(listener);
}
@Override
protected void onDestroy() {
onBackPressedListeners.clear();
super.onDestroy();
}
private boolean notifyOnBackPressed(){
boolean handledByFragment = false;
for (OnBackPressedListener listener : onBackPressedListeners){
handledByFragment = listener.onBackPressed();
if (handledByFragment)
break;
}
return handledByFragment;
}
@Override
public void onBackPressed() {
if (!notifyOnBackPressed())
super.onBackPressed();
}
} }
public class SampleFragment extends android.support.v4.app.Fragment implements OnBackPressedListener {
@Override
public void onAttach(Context context) {
super.onAttach(context);
((OnBackPressedNotifier)getActivity()).registerOnBackPressedListener(this);
}
@Override
public void onDetach() {
((OnBackPressedNotifier)getActivity()).unregisterOnBackPressedListener(this);
super.onDetach();
}
@Override
public boolean onBackPressed() {
// Handle onBackPressed
return false;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.