【发布时间】:2014-10-09 16:02:24
【问题描述】:
我有一个 ListActivity,其中包含带有 EditText 的列表项。
当列表中有很多项目时(比如 ~25 个)并且在给定时间只有 7 个可见。 当我点击一个项目时,我希望键盘显示“下一步”并滚动 1 - 25。 但最终发生的是,我将在第 6 项之前获得“下一个”,在第 7 项上获得“完成”。所以,基本上只在可见行上显示。 注意:如果我要在editText上设置“inputType”,我会自动获得“Next”而不设置imeoption(可能是它的错误或功能:))
这是我在 AndroidManifest.xml 中所做的,因此视图会调整以显示光标并自动滚动列表。
<activity
...
android:windowSoftInputMode="adjustUnspecified|adjustPan">
在 Activity onCreate 中,我将 Focusable 设置为 false,以便 editText 而不是 listview 本身获得焦点。
ListView listView = getListView();
listView.setFocusable(false);
在适配器类中我设置了editText的inputType。这样做会给我“Next”而不是“Enter”。
EditText editText = (EditText) view.findViewById(R.id.data_text);
editText.setText(getItem(position));
editText.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
我已经通过“SO”和谷歌搜索,我还没有找到任何线索。
编辑: 这是我的适配器类
class ItemAdapter extends ArrayAdapter<String> {
public ItemAdapter(Context context, int resource) {
super(context, resource);
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.list_item, parent, false);
}
final EditText editText = (EditText) view.findViewById(R.id.input_text );
String data = getItem(position);
editText.setText(data);
editText.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
return view;
}
}
【问题讨论】:
-
这在很大程度上取决于按钮的 onClick 方法,可能会受到适配器设计的影响。
-
让列表视图在“下一个”处向上滚动一个项目,这样“正在编辑”的 EditText 始终位于屏幕中间。
-
澄清一下,问题是,当我在列表视图中使用 imeoption 的 Next 编辑文本时,它只会滚动可见行。所以,如果我有 25 个项目,当应用程序启动时,列表视图将显示 1 到 7,(我将不得不查看更多数据.. 7-14.. 等等)。问题是,当我使用显示 1-7 的列表来统计应用程序时,如果我点击“下一步”,它会在键盘上滚动到第 2 项,然后是 3 .. 但是如果我点击下一步,它会在 7 处返回到 1 而不是去 8.
标签: android listview android-listview android-keypad android-input-method