提问者:小点点

Android:滚动到回收视图中的最后一项


我知道有一些关于我试图解决SO的讨论。到目前为止,我发现了几个:这个和这个。

这些建议在某种程度上对我有用,但不幸的是并没有解决我的整个问题。让我详细说明一下:

简单地说,我有一个项目的列表,我把它放在一个回收视图中,我想滚动到某个项目后,我点击了顶部菜单栏上的一个按钮。简单地说,我只是想滚动到最后一个项目时,点击,现在。

在检索到对RecyclerView的引用后,我尝试将代码放在正确的位置,如下所示(listView是一个RecyclerView):

    listView = (RecyclerView) mRoot.findViewById(R.id.list_section);
    listView.setHasFixedSize(true);
    LinearLayoutManager mListViewManager = new LinearLayoutManager(getActivity());
    listView.setLayoutManager(mListViewManager);
    listView.scrollToPosition(entries.size()-1);

这奏效了。然而,如果我试图做以下事情,它没有,请注意下面的评论:

 //enter this block when the menu item was clicked
 public boolean onOptionsItemSelected(MenuItem item) {
     //mPagerAdapter is a reference to a FragmentStatePagerAdapter extended class
     mPagerAdapter.highlightPosition(list.size()-1);
 }

//selSchedListFragment is a reference to a Fragment extended class
public void highlightPosition(int pos){
  selSchedListFragment.highlightPosition(pos);
};

而在Fragment类内部是如何定义的:

public void highlightPosition(int pos) {
    //listView.getLayoutManager().scrollToPosition(pos);
    listView.smoothScrollToPosition(pos);
    //listView.scrollToPosition(pos);
    //LinearLayoutManager llm = (LinearLayoutManager) listView.getLayoutManager();
    //llm.scrollToPositionWithOffset(pos , 29);

}

你会注意到,我尝试了一些技术的核心功能的高光位置,但没有工作。

一定有什么东西不见了,谁能建议一下。


共3个答案

匿名用户

在onOptionsItemS的方法做

mPagerAdapter.highlightPosition(listView.getAdapter().getItemCount() - 1);

匿名用户

对于列表视图中的滚动,您可以使用本机函数

对于直接滚动:

getListView().setSelection(21);

要平滑滚动:

listview.smoothScrollToPosition(21);

匿名用户

 mRecyclerView.getLayoutManager().smoothScrollToPosition(mRecyclerView,null, finalCustomItems.size()-1);