【问题标题】:How do I capture a Back Button press when a DiaglogFragment is open?当 DialogFragment 打开时,如何捕获后退按钮按下?
【发布时间】:2015-10-07 12:08:57
【问题描述】:

用户可以单击 DialogFragment 的“取消”按钮或屏幕上的“确定”按钮或设备上的后退按钮。取消和确定按钮的代码工作正常。单击后退按钮时,目标是关闭(关闭)DialogFragement 并返回到上一个活动。我的后退按钮代码不起作用,请告知。

public class CreateSkycardFragment extends DialogFragment {

public CreateSkycardFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.skyfrag_layout, container, false);
    getDialog().setTitle("Delete skycard");


    // if the user clicks "Cancel" in the "Delete skycard" dialog.
    Button btnCancel = (Button) rootView.findViewById(R.id.btnCancel);
    btnCancel.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(CardViewActivity.INPUT_METHOD_SERVICE);
            imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
            getDialog().cancel();
        }
    });

    // if the user clicks "OK" in the "Delete skycard" dialog.
    Button btnOK = (Button) rootView.findViewById(R.id.btnOK);
    btnOK.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            dismiss();
            getActivity().finish();
        }
    });

    // if the user presses the Back Button even with the "Delete skycard" dialog open.
    // the below code is where I'm having trouble
    .setOnBackPressListener(new OnBackPressListener() {
         @Override
         public void onBackPressed() {
             dismiss();
             getActivity().finish();
         }
    });
    return rootView;
}

}

【问题讨论】:

标签: android back-button android-dialogfragment


【解决方案1】:

可能是这样的吗?试一下。覆盖片段中的 onKeyDown。

public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
        case KeyEvent.KEYCODE_BACK:
            //Your code
            return true
}
        return false;

}

【讨论】:

  • 不过 ACTION_UP 和 ACTION_Down 怎么样。这是我必须在超出 KEYCODE_BACK 的其他代码中使用的示例。想法? public boolean onKeyPreIme(int keyCode, @NonNull KeyEvent event) { if(event.getKeyCode()==KeyEvent.KEYCODE_BACK) { if(event.getAction()== KeyEvent.ACTION_DOWN && event.getRepeatCount()==0) { getKeyDispatcherState().startTracking(event, this);返回真; } ...
猜你喜欢
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
  • 2012-04-27
相关资源
最近更新 更多