[英]How to smoothly scroll to clicked item to top of RecyclerView?
我有一個作為RecyclerView的項目列表(可擴展項目),並且我希望單擊時列表上的項目能夠平滑移動/滾動。
因此,假設我在第一個屏幕上具有以下列表,然后單擊項目“值6”。 我想通過將項目“值6”平滑滾動到頂部來實現第二個屏幕上的情況。
我的版式:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout >
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/toolbar_layout"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
app:layout_collapseMode="pin" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
</android.support.design.widget.CoordinatorLayout>
和我的實際適配器(它是ScrollingActivity的內部類,適用於Google示例)
public class Adapter extends RecyclerView.Adapter<Adapter.ItemHolder> {
Container[] values;
public Adapter() {
values = new Container[100];
for (int i = 0; i < values.length; i++) {
values[i] = new Container();
values[i].text = "value " + i;
}
}
@Override
public ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ItemHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent, false));
}
@Override
public void onBindViewHolder(ItemHolder holder, int position) {
holder.text.setText(values[position].text);
holder.more.setVisibility(values[position].visibility);
}
@Override
public int getItemCount() {
return values.length;
}
public class ItemHolder extends RecyclerView.ViewHolder {
private final TextView more; //it is expandable part
TextView text;
public ItemHolder(View itemView) {
super(itemView);
text = (TextView) itemView.findViewById(R.id.text);
more = (TextView) itemView.findViewById(R.id.more);
text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = getAdapterPosition();
if (more.getVisibility() == View.VISIBLE) {
more.setVisibility(View.GONE);
values[pos].visibility = View.GONE;
} else {
more.setVisibility(View.VISIBLE);
values[pos].visibility = View.VISIBLE;
int vfpos = linearLayoutManager.findFirstCompletelyVisibleItemPosition();
int d = pos - vfpos;
recyclerView.smoothScrollToPosition(pos);
}
}
});
}
}
}
所以我想念什么? 我想recyclerView.smoothScrollToPosition(pos)
什么也不做,因為該項目在屏幕上是實際的。 但是如何解決呢?
我嘗試從我的Expandable RecyclerView的expandablelistview 屏幕頂部的“移動/滾動單擊列表項目”視圖中編輯答案,它可以正常工作。
onLayoutExpanded()只是在擴展視圖時調用的抽象方法。
recyclerAdapter = new RecyclerAdapter(this, recyclerData) {
@Override
public void onLayoutExpanded(int position) {
int offset = position - recyclerLayoutManager.findFirstVisibleItemPosition();
if (recyclerLayoutManager.findFirstVisibleItemPosition() > 0) offset -= 1;
recyclerLayoutManager.scrollToPositionWithOffset(position, offset);
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.