Java Android:ListView问题中的EditText
我的应用程序中有一个listview,它基本上是一个问卷,因此用户需要填写一些编辑文本。我遇到了以下问题:Java Android:ListView问题中的EditText,java,android,Java,Android,我的应用程序中有一个listview,它基本上是一个问卷,因此用户需要填写一些编辑文本。我遇到了以下问题: 一些EditText需要数字输入,因此我将相应xml类型中的inputType设置为numeric,但是,当我单击EditText时,数字键盘会显示,但几乎立即消失,并显示常规键盘 可以想象,我需要将用户输入的值存储在这些编辑文本中。我的问题是,当我在一些编辑文本中输入一些文本并向下滚动后,返回时文本就消失了。您可以在我的代码中看到,我试图阻止这种情况,我应该提到,它可以很好地使用复选框
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;
}
由于问题2,你可以联系到这篇文章 因此,当你向下滚动时,似乎没有简单的方法来保存编辑文本 是的,你的权利,你可以试试 或者直接联系右侧的相关帖子问题解决方案#3:
windowSoftInputMode=“adjustPan”
android:genderantfocusability=“aftersenders”
或者用这样的代码:
listview.setDescendantFocusability(ViewGroup.FOCUS在子体之后)
您还需要将项目设置为可聚焦
您可以在如下代码中执行此操作:
listview.setItemsCanFocus(true)
此外,您还需要指定在显示软键盘时活动的主窗口发生了什么。这是通过更改属性来完成的。您可能希望将其设置为AdjustPan,以便不会调整listview的大小,从而不会再次调用GetView。这可能就是现在隐藏键盘时发生的情况,再次调用GetView并重置EditText中的原始值
您可以使用主活动类的XML上的属性
android:windowSoftInputMode=“adjustPan”
或getWindow().setSoftInputMode(LayoutParams.SOFT\u INPUT\u ADJUST\u PAN)
以编程方式执行此操作。这对我来说很有用。。。。请检查这个
listview.setItemsCanFocus(true);
我有一个带有Edittext的listview,当我在其中输入文本时,如果在此之前,我滚动listview,适配器会占据一些位置,而不是选定的位置 我的适配器采用不同的位置,而不是我的选择:
etCantidad.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
String cantidadTMP = etCantidad.getText().toString();
int cantidad;
try {
cantidad = Integer.parseInt(cantidadTMP);
item.setCantidad(cantidad);
Log.i("Name",""+item.getNombre());
}catch (Exception e){
cantidad = 0;
}
Log.i("QuantityArrayAdapter",String.valueOf(cantidad));
}});
09-25 09:22:10.458 12719-12719/? I/QuantityArrayAdapter: 1
09-25 09:22:10.458 12719-12719/? I/QuantityArrayAdapter: 1
09-25 09:22:10.458 12719-12719/? I/QuantityArrayAdapter: 1
一个编辑文本选择:
etCantidad.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
String cantidadTMP = etCantidad.getText().toString();
int cantidad;
try {
cantidad = Integer.parseInt(cantidadTMP);
item.setCantidad(cantidad);
Log.i("Name",""+item.getNombre());
}catch (Exception e){
cantidad = 0;
}
Log.i("QuantityArrayAdapter",String.valueOf(cantidad));
}});
09-25 09:22:10.458 12719-12719/? I/QuantityArrayAdapter: 1
09-25 09:22:10.458 12719-12719/? I/QuantityArrayAdapter: 1
09-25 09:22:10.458 12719-12719/? I/QuantityArrayAdapter: 1
因此,我将此方法添加到onTouchListener中,以仅获取选择位置:
etCantidad.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
etCantidad.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
String cantidadTMP = etCantidad.getText().toString();
int cantidad;
try {
cantidad = Integer.parseInt(cantidadTMP);
item.setCantidad(cantidad);
Log.i("Name",""+item.getNombre());
}catch (Exception e){
cantidad = 0;
}
Log.i("QuantityArrayAdapter",String.valueOf(cantidad));
}
});
return false;
}
});
只拿我想要的东西,这样对我很有用。谢谢,但答案只是告诉你自己回收行,但它没有解释如何有效地回收行,这正是我想知道的。你知道我在哪里能找到那样的东西吗?谢谢,我去看看。总之,我设法解决了这个问题,结果发现使用vh局部变量和holders数组有点冗余,所以我尝试消除所有冗余,效果很好。也许这可以帮助您解决问题#3?如果解决了,请张贴答案谢谢。1.android:genderantfocusability=“aftergenders”。2.将输入的文本按如下方式保存:或此处:。效果良好。谢谢:)