【发布时间】:2016-04-13 11:42:38
【问题描述】:
我有一个项目列表作为 RecyclerView(可扩展项目),我希望列表中的项目在单击时平滑移动/滚动。
假设我在第一个屏幕上有如下列表,然后单击项目“值 6”。我想通过将项目“value 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>
还有我的实际适配器(它是用于 Google 示例的 ScrollingActivity 中的内部类)
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) 什么都不做,因为这个项目在屏幕上是真实的。但是如何解决呢?
【问题讨论】:
标签: android android-recyclerview