Android Listview中的编辑文本滚动后的奇怪选择行为
listview中的EditText字段有问题。在我滚动一些设置后,似乎重置了selectAllOnFocus,并且选择光标变成了香蕉 我有一个带有自定义ArrayAdapter和自定义dataobject的listview。在这种情况下,对象只包含一个字符串以简化它 我的活动Android Listview中的编辑文本滚动后的奇怪选择行为,android,listview,android-listview,android-edittext,Android,Listview,Android Listview,Android Edittext,listview中的EditText字段有问题。在我滚动一些设置后,似乎重置了selectAllOnFocus,并且选择光标变成了香蕉 我有一个带有自定义ArrayAdapter和自定义dataobject的listview。在这种情况下,对象只包含一个字符串以简化它 我的活动 // adapter + content List<ListviewObject> listViewContent = new ArrayList<ListviewObject>(
// adapter + content
List<ListviewObject> listViewContent = new ArrayList<ListviewObject>();
for(int i = 0; i < 50; i++) {
listViewContent.add(new ListviewObject("num: " + i));
}
adapter = new CustomListAdapter(AddNewPerson.this, R.layout.list_item, listViewContent);
// list
ListView mListView = (ListView)findViewById(R.id.sample_list);
mListView.setItemsCanFocus(true);
mListView.setAdapter(adapter);
要解决我在设置的其他线程中发现的所有焦点问题,请执行以下操作:
.setItemsCanFocustrue在listview上
android:DegenantFocusability=活动XML中的before子体
清单XML中的android:windowSoftInputMode=adjustPan
聚焦和编辑文本效果很好。当我滚动正确的值时,所有这些似乎都正常工作
在我滚动并单击一些编辑文本之前,会发生这种情况。上次聚焦模糊,单击一次聚焦,内容被选中
在我再次向下和向上滚动,并像以前一样单击之后,就会发生这种情况
这是由于listView回收机制造成的。要了解有关listview回收机制的更多信息,可以参考以下内容 在本例中,通过存储上次聚焦的editText并在getView中将焦点设置为仅上次存储的整数并跳过其他位置,可以避免此问题。希望这能帮助你 这很简单: 声明字符串[],以跟踪addTextChangedListener的PostTextChanged中每个EditText的输入 注意秩序:
viewHolder.editText.removeTextChangedListener(viewHolder.textWatcher);
viewHolder.textWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
mInputs[position] = editable.toString(); //record input
viewHolder.editText.setSelection(viewHolder.editText.getText().length()); //set cursor to the end
}
};
viewHolder.editText.addTextChangedListener(viewHolder.textWatcher);
viewHolder.editText.setText(mInputs[position]);
将android:WindowsOfInputMode=adjustPan添加到AndroidManifest文件中的活动中
祝你好运 查看此链接据我所知,在列表视图中使用编辑文本是一种不好的做法。因此,使用TextView而不是EditText并在单击/模糊时替换它们似乎是最可行的选择,甚至可以重用convertView,但不使用其中的EditText在getView上重新创建它。在最后的设置中,我遇到了更多的怪癖,所以我并不真的想通过一些糟糕的练习来解决问题。我决定解决这个问题,因为不止一件事情出了问题。
viewHolder.editText.removeTextChangedListener(viewHolder.textWatcher);
viewHolder.textWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
mInputs[position] = editable.toString(); //record input
viewHolder.editText.setSelection(viewHolder.editText.getText().length()); //set cursor to the end
}
};
viewHolder.editText.addTextChangedListener(viewHolder.textWatcher);
viewHolder.editText.setText(mInputs[position]);