我想为我的Main活动中包含的所有片段实现自定义onBackPressed方法。但是当我按下设备后,我没有得到一个钩子。我尝试在SOF中实现一些可用的东西,但它们都没有正常工作。 请帮助!
我在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;
}
} );
答案 0 :(得分:1)
您可以使用新的 API。
;
答案 1 :(得分:0)
这里的问题相同。我通过将actionbar title设置为fragment来解决这个问题,然后通过检查ActionBar的标题检查onBackPressed当前可见哪个片段。它不是合适的解决方案,但它对我来说非常适合。如果你有任何问题告诉我。希望它对你有用。 Thanx
答案 2 :(得分:0)
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;
}