我有一个ListView,每行有一个EditText(除了几个不可编辑的TextView).当我在EditText中编辑文本时,软键盘有“下一步”按钮 – 按下它会将焦点移动到下一个字段 – 这很棒.在最后一行,按钮变为“完成”.
我正在使用EditText.setImeOptions将按钮设置为“完成”或“下一步”,具体取决于这是否是最后一行.
问题是列表视图可以有更多的行可以适应屏幕.发生这种情况时,在下一个可见行上按“下一步”会将焦点再次移动到第一行.如何让它滚动列表并转到下一行呢?
作为参考,这是我在适配器中所做的事情:
public class AuditAdapter extends BaseAdapter {
private Context context;
private int layoutResourceId;
private Audit audit;
...
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
final AuditItemHolder holder = (row == null ? new AuditItemHolder() : (AuditItemHolder)row.getTag());
if(row == null)
{
LayoutInflater inflater = ...;
row = inflater.inflate(layoutResourceId, parent, false);
...
holder.qtyf = (EditText)row.findViewById(R.id.item_quantity);
}
AuditItem item = audit.getItemAt(position);
holder.qtyf.setText("" + item.getQuantity());
holder.qtyf.setImeOptions(position == audit.size() - 1 ? EditorInfo.IME_ACTION_DONE : EditorInfo.IME_ACTION_NEXT);
...
row.setTag(holder);
return row;
}
private static class AuditItemHolder {
...
EditText qtyf;
}
}