When I put a RecyclerView inside a nested scrollview, the screen always jumps to the top of the RecyclerView instead of the top of the page. Here is a simple example.
layout xml:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="350dp"
android:background="@android:color/holo_blue_dark"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycleView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</layout>
Activity with dummy adapter:
public class RecycleViewTestActivity extends AppCompatActivity {
public static class ExampleAdapter extends RecyclerView.Adapter<ExampleViewHolder> {
private Context context;
public ExampleAdapter(Context context) {
this.context = context;
}
@Override
public ExampleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
TextView view = new TextView(context);
view.setText("Test");
return new ExampleViewHolder(view);
}
@Override
public void onBindViewHolder(ExampleViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return 100;
}
}
public static class ExampleViewHolder extends RecyclerView.ViewHolder {
public ExampleViewHolder(View itemView) {
super(itemView);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rectest);
RecyclerView view = (RecyclerView) findViewById(R.id.recycleView);
view.setNestedScrollingEnabled(false);
view.setLayoutManager(new LinearLayoutManager(this));
ExampleAdapter adapter = new ExampleAdapter(this);
view.setAdapter(adapter);
}
}
In this example I have a 350dp tall empty view over the recycleview because you need to have some content over the RecycleView for this to show up obviously. The RecycleView iteself contains 100 dummy textviews.
After you start the activity, the scroll is at the top of the RecycleView instead of the top of the page. It must be something inside the LinearLayoutManager, but havent really looked yet.
Any ideas how to solve this?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…