当按下返回按钮时,listview 会顶部。如何解决?
Posted
技术标签:
【中文标题】当按下返回按钮时,listview 会顶部。如何解决?【英文标题】:When press back button listview going top. How to fix that? 【发布时间】:2020-01-09 17:47:33 【问题描述】:在我的代码中有两个片段。列表页面和详细信息页面。列表页面上有很多字母项目。当我单击某些项目打开详细信息页面时。但是当我按下后退按钮时,列表不会保持相同的位置。它到达顶部。我搜索了一些解决方案,但我认为这不是常见问题。我找不到不同的答案。有人帮我吗?
【问题讨论】:
【参考方案1】:乍一看,这似乎是您拨打的电话之一:dictionaryFragment.resetDatasource(source);
这会将您的ListView
上的Adapter
重置为全新的ArrayAdapter
。这会将ListView
重置为顶部,因为适配器是一个全新的对象。 ListView 不再对旧的 ArrayAdapter 有任何想法,因此重置为顶部。
public void resetDatasource (ArrayList<String> source)
mSource=source;
adapter = new ArrayAdapter<String>(getContext(),R.layout.kelimelistesi, mSource);
dicList.setAdapter(adapter);
而不是调用
adapter = new ArrayAdapter<String>(getContext(),R.layout.kelimelistesi, mSource);
dicList.setAdapter(adapter);
你应该做更多这样的事情:
public class DictionaryFragment ...
private Adapter mAdapter;
public View onCreateView(...)
// Init the layout here
// Put some other ArrayList here if you have one initially, else an empty one to start
mAdapter = new ArrayAdapter<String>(getContext(), R.layout.kelimelistesi, new ArrayList<String>());
dicList.setAdapter(mAdapter);
public void resetDatasource(ArrayList<String> source)
mAdapter.clear();
mAdapter.addAll(source);
mAdapter.notifyDataSetChanged();
...
现在的区别在于 same mAdapter
实例始终绑定到 dicList
,但只有要显示的基础数据发生了变化。将 ListView/RecyclerView 的 Adapter
视为一个接受一些输入数据并将其绑定到一些 UI 元素的类。在这种情况下,ArrayAdapter 中的每个 String 都会显示在一些 UI 元素中,例如 TextView 或其他。
同样重要:请注意,我们调用notifyDataSetChanged()
之后我们已经清除了旧数据并添加了所有新数据。这将有助于避免一次尝试一个元素时出现闪烁和滚动问题。
【讨论】:
您好 MCLLC 非常感谢您的回答。我尝试了您所说的并更改了这样的代码(您可以在我编辑的帖子中看到)但现在我收到错误错误:找不到符号方法 clear() 错误:找不到符号方法 addAll(ArrayList以上是关于当按下返回按钮时,listview 会顶部。如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 动画列表:有条件地添加 ListView 项