我有一个带有每个单元格中的EditTexts
的Listview
。每当我添加文本到使EditText
增长1行的程度时,ListView
会滚动到顶部(并通常通过这样做将EditText
从视图中移除)。
我找到了一些相关问题,但它们似乎只有“hack”作为答案,没有适用于我的解决方案。
Listview中的EditText - 在“下一个”上自动滚动
编辑: 经过大量研究,我发现这是因为editText正在调整大小,导致ListView布局其子视图,然后重置到顶部。我想找到一种方法让EditText在保持原来位置的同时增长。
我尝试了这个,因为我在网上找到了建议,但是,即使它保持了ListView
的正确高度,它也清除了EditText
的焦点,并且我似乎无法用requestFocus
重新获得它。
private Stirng getTextWatcher(){
return 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) {
listView.setSelection(index);
}
}
}
因此,我需要以下之一:
让
ListView
在子视图再次布局时不自动滚动到顶部或在调用
ListView.setSelected()
后聚焦我的EditText
,或者3.有另一种方式来滚动ListView
而不会清除EditText
的焦点。
对于选项3:
- 我已经尝试了
scrollTo()
和smoothScrollToPosition()
。scrollTo
因某种原因可行,但会隐藏ListView
中的某些项目(它们变得不可见,未加载)。而smoothScrollToPosition()
则创建一个动画,在这个动画中ListView
会跳到顶部,然后再将用户带回该项目(并且会重复2或3次)。