当EditText变大时,ListView会滚动到顶部

13

我有一个带有每个单元格中的EditTextsListview。每当我添加文本到使EditText增长1行的程度时,ListView会滚动到顶部(并通常通过这样做将EditText从视图中移除)。

我找到了一些相关问题,但它们似乎只有“hack”作为答案,没有适用于我的解决方案。

输入多行EditText时ListView滚动到顶部

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);
  }
 }
}

因此,我需要以下之一:

  1. ListView在子视图再次布局时不自动滚动到顶部或

  2. 在调用ListView.setSelected()后聚焦我的EditText,或者3.有另一种方式来滚动ListView而不会清除EditText的焦点。

对于选项3:

  1. 我已经尝试了scrollTo()smoothScrollToPosition()scrollTo因某种原因可行,但会隐藏ListView中的某些项目(它们变得不可见,未加载)。而smoothScrollToPosition()则创建一个动画,在这个动画中ListView会跳到顶部,然后再将用户带回该项目(并且会重复2或3次)。

你能发一下你的代码吗?为什么这些答案对你不起作用? - legendof
@legendof 发布我的代码是为了什么?ListView吗?对我来说,它似乎非常标准。没有什么特别的。在Java中,我除了填充它之外什么也不做,只在XML中操作。 我的意思是所有这些都是hack,我想要优雅高效的东西...而不是像“每次添加一个字母就滚动ListView”这样的东西。 - NickProvost
你能展示一下XML布局吗?包括ListView的代码以及它的父级。它是不是在ScrollView里面呢? - Kostas Andrianos
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
4
以我个人的看法,如果您想通过使用EditTextListView项目中获取输入,则应该使用TextView替代EdiText,并通过单击TextView来打开一个带有EditText的输入对话框,这是更简单和更好的解决方案。在ListView中处理EditText焦点是非常困难的,您需要为此添加额外的Listeners。 或者,如果您的UI/UX中的输入框数量有限,则可以通过使用ScrollViewsEditTextCustomListView 一起实现。

1
我刚刚测试了你的方法,第二个方法对我来说完美无缺。我的做法是在ScrollView内使用线性布局,并在Java代码中以编程方式插入视图。它运行良好,当EditText增长时,ScrollView仍然保持在原位置。谢谢! - NickProvost

0

EditText增长时,ListView会滚动到顶部。

ListView存在一些与子焦点相关的已知限制。

解决方案

为什么不尝试使用RecyclerView代替ListView呢?Google推荐使用RecyclerView作为此类UI的默认方式。因此,不再需要自定义ListView或hack。


同样的情况也会发生在RecyclerView上。https://dev59.com/25bfa4cB1Zd3GeqPrk3J?rq=1 - ziLk

0
你可以尝试将这个属性添加到你的ListView中:
android:transcriptMode="normal"
当数据集发生更改通知且仅当最后一项已在屏幕上可见时,此功能会使列表自动滚动到底部。 点击此处了解更多:attr_android:transcriptMode | Android Developers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,