2017-12-01 5 views
-1

このようなダイアログ(編集テキスト、ボタン、テストビューが1つあります)を作成しました。私はバックボタンが押されたときにダイアログを閉じしようとしています戻るキーのダイアログを閉じる

val askPhoneDialog= AskPhoneDialog(context, android.R.style.Theme_Material_Light_NoActionBar_Fullscreen,dataManager!!) 
askPhoneDialog.show() 

:このようなダイアログを呼び出す

class AskPhoneDialog:Dialog{ 
    constructor(context: Context) : super(context) {} 

    var mContext:Context?=null 
    var dataManager:DataManager?=null 

    constructor(context: Context, themeResId: Int, dataManager: DataManager) : super(context, themeResId) { 
     this.mContext=context 
     this.dataManager=dataManager; 

    } 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.mobile_bottom_sheet_layout) 
     setUp() 
    } 

    private fun setUp() { 
     window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT) 
     window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE 
    } 
} 

。しかし、ユーザーが最初に「戻る」ボタンを押すとキーボードが隠れ、「戻る」ボタンをもう一度押すとダイアログだけが消えます。

必要な出力:ユーザーが最初に戻るボタンを押すと、キーボードとともにダイアログが閉じます。

私はダイアログと親アクティビティのonBackPressed、onKeyDown、onKeyUp、onTochEventメソッドをオーバーライドしようとしましたが、これらのメソッドのどれもが押されていません。

+0

backを押してsoftkeyboardが見えるような特定の条件でonBackPressed()を呼び出すと、onBackPressed()が2回呼び出されるので、最初の呼び出しではキーボードが隠され、次にダイアログが閉じられます。あなたが私を得ることを望む –

+0

ユーザーが戻るボタンを最初にクリックするときに、どのメソッドが呼び出しているかを検出できません。しかし、それはonBackPressed()やその他のメソッド@NirmalPrajapat –

+0

に記載されていないことを確認してください。質問をdownvoteした人は、その理由をコメントしてください。次回は、 –

答えて

0

あなたのフラグメントにこのコードを挿入します。

layoutView.setFocusableInTouchMode(true); 
    layoutView.requestFocus(); 
    layoutView.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { 
       Log.i("Check", "onKey Back listener is working!!!"); 
       if(isKeyboardVisible(getActivity())) 
       { 
        View view = getActivity().getCurrentFocus(); 
        if (view != null) { 
         InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
         imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 
        } 
       } 
       else{ 
        getDialog().dismiss(); 
       } 


       return true; 
      } 
      return false; 
     } 
    }); 

ここでの "layoutViewは、" フラグメントのrootviewです。

およびフラグメント内のメソッドを作成:

private static boolean isKeyboardVisible(Activity activity) { 
    Rect r = new Rect(); 
    View contentView = activity.findViewById(android.R.id.content); 
    contentView.getWindowVisibleDisplayFrame(r); 
    int screenHeight = contentView.getRootView().getHeight(); 
    int keypadHeight = screenHeight - r.bottom; 

    return (keypadHeight > screenHeight * 0.15); 
} 

を断片の私の呼び出しは次のようである:

CheckFragment checkFragment = new CheckFragment(); 
    checkFragment.show(getFragmentManager(),"Checking"); 

おかげで、より多くの助けが必要な場合は私に知らせて!

関連する問題