Po umieszczeniu RecycleView wewnątrz zagnieżdżonego przewijania, ekran zawsze przeskakuje na szczyt widoku recycle zamiast na górę strony. Oto prosty przykład.RecycleView przechwytuje fokus, gdy wewnątrz NestedScrollView
układ 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>
aktywny z manekina adaptera:
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);
}
}
W tym przykładzie mam 350dp wysoki pusty widok na recycleview ponieważ trzeba mieć jakąś treść nad RecycleView dla to oczywiste. RecycleView sam zawiera 100 fałszywych odsyłaczy tekstowych.
Po uruchomieniu czynności przewijanie znajduje się u góry okna RecycleView, a nie u góry strony. To musi być coś wewnątrz LinearLayoutManager, ale naprawdę jeszcze nie wyglądało.
Wszelkie pomysły na rozwiązanie tego problemu?
[ten sam problem rozwiązanie Sprawdź tutaj] (http://stackoverflow.com/a/41481237/1993001) –