[英]EditText in PopupWindow from onItemClick of ListView is not focused on
我有一個ListView
,每行都有一個TextView
,單擊該行后,我希望在該行下彈出一個帶有EditText
的PopupWindow
。 用戶輸入的文本應顯示在該行的TextView
中。
當我單擊一行時, TextView
確實出現,但是我沒有屏幕上的鍵盤。 但是我正在使用模擬器,無論我在鍵盤上鍵入的內容是否都會出現在EditText
。 但是我也需要屏幕鍵盤來顯示。 另外,由於EditText似乎從未獲得焦點,所以我永遠也無法擺脫它,因為當EditText
失去焦點時,我將關閉PopupWindow
。
我已經看過this , this和其他一些答案。 他們都說setFocusable(true)
應該為PopupWindow
完成。 這沒用。 其他答案包括關閉並再次顯示彈出窗口或為彈出窗口設置背景,或顯式調用InputMethodManager inputMgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
並顯示軟輸入,全部嘗試,沒有任何效果。
這是我的onListItemClick代碼:
private class SearchItemClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Log.d("listItemClick", "received lsit click");
final TextView selectTV=(TextView)view.findViewById(R.id.filter_name);
final StringPair selectItem=mSearchFilters.get(position);
final PopupWindow mPopupWindow;
Log.d("listItemClick", "got to else");
LinearLayout layout=new LinearLayout(mContext);
final EditText et=new EditText(mContext);
et.setWidth(LayoutParams.MATCH_PARENT);
et.setTextColor(Color.BLACK);
et.setSingleLine();
et.setBackgroundResource(android.R.drawable.editbox_background_normal);;
layout.addView(et);
mPopupWindow=new PopupWindow(layout, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
et.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus){
selectTV.setText(et.getText().toString());
selectItem.second=et.getText().toString();
mPopupWindow.dismiss();
}
}
});
mPopupWindow.setFocusable(true);
mPopupWindow.update();
mPopupWindow.showAsDropDown(view);
mPopupWindow.dismiss();
mPopupWindow.showAsDropDown(view);
Log.d("listItemClick", "showed popup");
}
}
附注:在一個旁注中,EditText的寬度很小,似乎只能包含4-5個字符,如何使它成為有效的屏幕寬度? 將寬度設置為MATCH_PARENT無效。
這是一張圖片,很小的edittext,沒有鍵盤:
你可以試試
.
.
.
et.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus){
selectTV.setText(et.getText().toString());
selectItem.second=et.getText().toString();
mPopupWindow.dismiss();
}
}
});
mPopupWindow.showAsDropDown(view);
mPopupWindow.setFocusable(true);
mPopupWindow.update();
.
.
.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.