我在每个单元格中都有Listview
EditTexts
。每当我向EditText
增长1行的点添加文本时,ListView
会滚动到顶部(通常会从视图中删除EditText
)。
我发现了一些关于此的问题,但他们似乎只有“黑客”作为答案而且对我来说没有任何作用。
ListView scrolls to top when typing in multi-line EditText
Listview with edittext - auto scroll on "next"
编辑: 经过大量的研究,我发现这是因为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
无法自动滚动到顶部或
在调用EditText
或3之后关注ListView.setSelected()
的方法。有另一种方法可以滚动ListView
无法清除焦点EditText
选项
scrollTo()
和smoothScrollToPosition()
。 scrollTo
由于某种原因有效但隐藏了ListView
中的某些项目(它们变为不可见,未加载)。并且smoothScrollToPosition()
创建一个动画,其中ListView
跳转到顶部,然后它将用户带回到项目(并执行2或3次)。 答案 0 :(得分:4)
如果您想使用ListView
从EditText
项目中获取输入,那么您应该使用TextView
到位EdiText
并点击{{1你应该用TextView
打开和输入对话框,这是一个更简单和更好的解决方案。在EditText
处理EditText
焦点的难度很大,您需要为此添加ListView
。
或强>
如果您的UI / UX中的输入框数量有限,那么您可以使用Listeners
与EditText
一起实施CustomListView
。
答案 1 :(得分:0)
当EditText增长时,ListView滚动到顶部
ListView
有一些与儿童焦点相关的已知限制。
<强>解决方案强>
为什么不尝试使用RecyclerView
代替ListView
?谷歌推出RecyclerView
作为此类用户界面的默认推荐方式。因此,不再需要自定义ListView
或黑客攻击。
答案 2 :(得分:0)
您可以尝试将此属性添加到ListView
:
android:transcriptMode="normal"
这会使列表在收到数据集更改通知时自动滚动到底部,并且仅当最后一项已在屏幕上显示时才会显示。