2017-12-01 5 views
-1

Ich habe den Dialog erstellt (er hat einen Text bearbeiten, Button und Testview) wie folgt.Dismiss Dialog auf der Rücktaste gedrückt

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 
    } 
} 

den Dialog wie folgt aufrufen:

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

Ich versuche, den Dialog zu schließen, wenn der Zurück-Taste gedrückt wird. Wenn der Benutzer jedoch zuerst die Zurück-Taste drückt, blendet er die Tastatur aus. Wenn der Benutzer die Zurück-Taste erneut drückt, wird nur der Dialog beendet.

Erforderliche Ausgabe: Wenn der Benutzer zuerst die Zurück-Taste drückt, sollte er den Dialog zusammen mit der Tastatur schließen.

Ich habe versucht, die onBackPressed, onKeyDown, onKeyUp, onTochEvent -Methode von Dialog und übergeordnete Aktivität zu überschreiben, aber keine dieser Methoden trifft auf Back gedrückt.

+0

versuchen Sie onBackPressed() in sich selbst unter bestimmten Bedingungen aufrufen, wie wenn Sie drücken und Softkeyboard sichtbar ist, dann rufen Sie onBackPressed() zweimal, so dass beim ersten Aufruf die Tastatur und auf der zweiten das Dialogfeld wird ausgeblendet. hoffe du bekommst mich –

+0

Ich bin nicht in der Lage zu erkennen, welche Methode ruft, wenn der Benutzer zum ersten Mal auf die Schaltfläche zurück klickt. Aber es ist sicher, es ist nicht OnBackPressed() oder andere Methode in der Frage @NirmalPrajapat –

+0

aufgelistet Wer die Frage abgelehnt hat, bitte den Grund kommentieren. SO, dass das nächste Mal, ich werde die Frage –

Antwort

0

Fügen Sie diesen Code in Ihrem Fragmente:

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; 
     } 
    }); 

hier "layoutView" ist RootView des Fragments.

und ein Verfahren in Fragment erstellen:

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); 
} 

Meine Berufung Fragment ist wie:

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

Dank Und lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen !!

Verwandte Themen