列表视图在编辑文本增长时滚动到顶部

2022-09-04 23:11:04

我在每个细胞中都有一个。每当我将文本添加到增长1行的点时,滚动到顶部(并且通常通过这样做从视图中删除)。ListviewEditTextsEditTextListViewEditText

我发现了一些关于这个问题的问题,但他们似乎只有“黑客”作为答案,没有对我有用的东西。

ListView 在多行 EditText 中键入内容时滚动到顶部

带有编辑文本的列表视图 - 自动滚动到“下一步”

编辑:经过大量研究,我发现这是因为editText正在调整大小,导致ListView布局其子视图,然后重置为顶部。我想找到一种方法,让EditText在停留在同一个地方的同时成长。

我尝试了这个,因为我在网上找到一个建议,但是,即使它保持在正确的高度,它也清除了焦点,我似乎无法用.ListViewEditTextrequestFocus

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. 一种在打电话或3后集中注意力的方法。有另一种方法可以滚动,不会从 中清除焦点。EditTextListView.setSelected()ListViewEditText

对于选项

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

答案 1

作为我的观点,如果你想通过使用从项目中获取输入,那么你应该使用到位,通过点击你应该打开和输入对话框,这是更简单和好的解决方案。处理焦点是不同的困难,你需要为此付出额外的代价。ListViewEditTextTextViewEdiTextTextViewEditTextEditTextListViewListeners

如果 UI/UX 中的输入框数量有限,则可以使用 来实现 。EditTextCustomListViewScrollViews


答案 2

列表视图在编辑文本增长时滚动到顶部

ListView有一些已知的与儿童注意力相关的局限性。

溶液

你为什么不尝试使用 RecyclerView 而不是 ?谷歌引入了作为默认推荐方式的这种UI。因此,不再需要自定义或黑客。ListViewRecyclerViewListView


推荐