我有一个ListView
,每行都有一个TextView
,点击该行后,我想要一个PopupWindow
,其中EditText
会在该行下方显示。然后,用户输入的文本应显示在行的TextView
中。
当我点击一行时,TextView
会出现,但我没有获得屏幕键盘。但我正在使用模拟器,而我在键盘上键入的内容确实出现在EditText
中。但我显然需要屏幕键盘才能显示出来。此外,由于EditText似乎永远不会有焦点,我永远无法摆脱它,因为当PopupWindow
失去焦点时,我正在解雇EditText
。
我查看了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");
}
}
PS 在旁注中,EditText的宽度非常小,似乎只能包含4-5个字符,如何才能使其成为全屏宽度?将宽度设置为MATCH_PARENT不起作用。
这是一张图片,小编辑文字,没有键盘:
答案 0 :(得分:0)
你可以尝试
.
.
.
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();
.
.
.