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.