3 Stimmen

Android PopupWindow lässt sich nicht auflösen

Ich habe den folgenden Code, der ein PopupWindow mit einem EditText erstellt:

lbs.setOnTouchListener(new OnTouchListener(){

        @Override
        public boolean onTouch(View v, MotionEvent arg1) {
            int pWidth = 100;
            int pHeight = 80;
            int vHeight = mView.getHeight();
            int[] location = new int[2];
            v.getLocationOnScreen(location);
            final View view = inflater.inflate(R.layout.list_popup, null, false);
            final PopupWindow pw = new PopupWindow(view, pWidth, pHeight, false);
            pw.setTouchable(true);
            //pw.setFocusable(true);
            pw.setOutsideTouchable(true);
            pw.setBackgroundDrawable(new BitmapDrawable());
            pw.setContentView(view);
            pw.showAtLocation(v, Gravity.NO_GRAVITY, location[0]-(pWidth/4), location[1]+vHeight);
            //final LinearLayout layout = (LinearLayout)view.findViewById(R.id.PopupLayout);

            final EditText input = (EditText)view.findViewById(R.id.Input);
            input.setOnFocusChangeListener(new View.OnFocusChangeListener() {

                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    Log.i("Focus", "Focus Changed");
                    /*
                    if (hasFocus) {
                        InputMethodManager inputMgr = (InputMethodManager)myContext.getSystemService(Context.INPUT_METHOD_SERVICE);
                        inputMgr.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
                        inputMgr.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
                    }
                    */

                }
            });
            input.setText(lbs.getText().toString());
            input.requestFocus();
            pw.setOnDismissListener(new OnDismissListener(){

                @Override
                public void onDismiss() {
                    parentActivity.changeWeight(getId, Double.parseDouble(input.getText().toString()));
                    Log.i("View Visibility", "" + view.getVisibility());
                }

            });

            pw.setTouchInterceptor(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
                        Log.i("Background", "Back Touched");
                        pw.dismiss();               
                        return true;
                    }
                    return false;
                }
            });

            return true;
        }   
    });

Das PopupWindows hat eine setBackGroundDrawable, so dass, wenn der Benutzer berührt außerhalb des Fensters der Box sollte automatisch schließen. Ich weiß, dass das Feld entlassen wird, weil meine OnDismiss-Methode ausgeführt wird, wenn ich außerhalb des Feldes klicken, aber das eigentliche Fenster verschwindet nicht, bis ich zweimal außerhalb des Feldes berühren und deshalb die onDismiss läuft zweimal, die ich nicht haben kann. Was übersehe ich hier?

EDIT: Ich habe meinen Code leicht aktualisiert. Wenn ich KEINEN Fokus auf das Popupfenster setze, funktioniert alles perfekt, außer der Tatsache, dass ich den Fokus nicht auf meinen Editetext bekommen kann. Wenn ich setFocusable auf das Popup dann der editText nicht erhalten Fokus sofort und ich habe zu doppelklicken, um es zu entfernen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X