当EditText成长时,ListView滚动到顶部

时间:2017-04-18 16:57:01

标签: java android listview android-edittext

我在每个单元格中都有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);
  }
 }
}

所以我需要的是:

  1. 当子视图重新布局时,ListView无法自动滚动到顶部或

  2. 在调用EditText或3之后关注ListView.setSelected()的方法。有另一种方法可以滚动ListView无法清除焦点EditText

  3. 选项

    1. 我尝试了scrollTo()smoothScrollToPosition()scrollTo由于某种原因有效但隐藏了ListView中的某些项目(它们变为不可见,未加载)。并且smoothScrollToPosition()创建一个动画,其中ListView跳转到顶部,然后它将用户带回到项目(并执行2或3次)。

3 个答案:

答案 0 :(得分:4)

如果您想使用ListViewEditText项目中获取输入,那么您应该使用TextView到位EdiText并点击{{1你应该用TextView打开和输入对话框,这是一个更简单和更好的解决方案。在EditText处理EditText焦点的难度很大,您需要为此添加ListView

如果您的UI / UX中的输入框数量有限,那么您可以使用ListenersEditText一起实施CustomListView

答案 1 :(得分:0)

  

当EditText增长时,ListView滚动到顶部

ListView有一些与儿童焦点相关的已知限制。

<强>解决方案

为什么不尝试使用RecyclerView代替ListView?谷歌推出RecyclerView作为此类用户界面的默认推荐方式。因此,不再需要自定义ListView或黑客攻击。

答案 2 :(得分:0)

您可以尝试将此属性添加到ListView

android:transcriptMode="normal"
  

这会使列表在收到数据集更改通知时自动滚动到底部,并且仅当最后一项已在屏幕上显示时才会显示。

在此处阅读更多内容:attr_android:transcriptMode | Android Developers