我的应用程序中有一个列表视图,基本上是一个问卷,因此用户需要填写一些 EditText。我遇到了以下问题:
一些 EditText 需要数字输入,因此我将相应 xml 类型中的 inputType 设置为数字,但是,当我单击 EditText 时,显示数字键盘但几乎立即消失并显示常规键盘。
可以想象,我需要将用户输入的值存储在这些 EditText 中。我遇到的问题是,在我在一些 EditTexts 中输入一些文本并向下滚动后,当我返回时,文本就消失了。您可以在我的代码中看到我试图阻止这种情况,我应该提到它与复选框完美配合。
一开始我遇到了失去焦点的问题,但我通过查看其他问题解决了它(在 ListView 和 windowSoftInputMode="adjustPan" 中添加了 descendantFocusablity="beforeDescendants")。工作正常,除了当 EditText 低于屏幕的一半时,一旦我开始输入它就会失去焦点。 列表适配器的 getView 方法:
public View getView(final int position,View result,ViewGroup parent) { final ViewHolder vh; final Question question = values.get(position); if(holders[position]==null) vh = new ViewHolder(); else vh = holders[position]; LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); if(question.getQuestionType().equals(Question.TYPE_CLOSED)) { result = inflater.inflate(R.layout.closed_question_list_item, null); vh.cb = (CheckBox)result.findViewById(R.id.checkbox); vh.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { vh.isChecked = isChecked; holders[position] = vh; } }); vh.cb.setChecked(vh.isChecked); } else { result = inflater.inflate(R.layout.numeric_question_list_item, null); vh.et = (EditText)result.findViewById(R.id.question_et); vh.et.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) { vh.tvValue = s.toString(); holders[position] = vh; Log.i(TAG,"Entered afterTextChanged for "+ question.getText()); } @Override public void beforeTextChanged(CharSequence s, int start,int count, int after) { } @Override public void onTextChanged(CharSequence s, int start,int before, int count) { } }); vh.et.setText(vh.tvValue); } vh.tv = (TextView)result.findViewById(R.id.question_text); vh.tv.setText(question.getText()); holders[position] = vh; result.setTag(vh); return result; }