NestedScrollView 在 Recyclerview 调整大小后滚动到顶部
NestedScrollView scrolls to top on Recyclerview resized
我有一个包含 LinearLayout 和 RecyclerView(都在 RelativeLayout 中)的 NestedScrollView。
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/scroll">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lay_account">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:paddingTop="10dp"
android:id="@+id/lay_total"
android:paddingBottom="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/total"
android:id="@+id/lblTotal"
android:textSize="@dimen/text_medium"
android:layout_marginLeft="20dp"
android:textColor="@color/dark_eurakostheme_color"
android:textStyle="bold"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical|center_horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txtTotalAmount"
android:textSize="@dimen/text_extra_extra_large"
android:gravity="center_horizontal"
android:textColor="@color/eurakostheme_color"/>
<ImageView
android:layout_width="@dimen/icon_extra_extra_large"
android:layout_height="match_parent"
android:id="@+id/imageView3"
android:src="@drawable/coin_eurakos"/>
</LinearLayout>
</LinearLayout>
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:id="@+id/divisor"
android:background="@color/dividerColor"
android:layout_alignBottom="@+id/lay_total"/>
<android.support.v7.widget.RecyclerView
android:layout_below="@id/lay_total"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/rclBasketAmounts"
android:background="@android:color/white"
android:padding="10dp">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
将数据加载到 RecyclerView 后,我需要像这样以编程方式更改它的高度:
RelativeLayout.LayoutParams lay_params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
50 + ((int) (baskets.length * getResources().getDimension(R.dimen.list_height_small))));
lay_params.addRule(RelativeLayout.BELOW, lay_total.getId());
recyclerView.setLayoutParams(lay_params);
recyclerView.setAdapter(new ListBasketAmountAdapter(baskets));
问题是当数据完成加载时,NestedScrollView 滚动自动滚动到 RecyclerView 的顶部,隐藏其上方的 LinearLayout。有什么想法吗?
谢谢。
几天后,我找到了解决问题的办法。您只需要在 ScrollView
下的第一个布局中添加 descendantFocusability
,如下所示:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lay_account"
android:descendantFocusability="blocksDescendants">
kevings14 给出的解决方案有效,但对我的情况没有帮助。当我添加
时,我在 NestedScrollView
下有一个 RecyclerView
+ 几个 EditText
android:descendantFocusability="blocksDescendants"
在滚动视图下的主布局中。我无法集中注意力 EditText
。
然后我想到了这个对我有用的解决方案。
<RelativeLayout
android:layout_width="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_height="wrap_content">
In my case, I use multiple RecyclerView inside NestedScrollView. Then
it does not work for me. So my solution is, When my data update complete then I just scroll to top,
yourList.setAdapter(yourListAdapter);
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_UP);
//scrollView.scrollTo(0,0);
}
});
我有一个会自动向上滚动的 nestedscrollview。在 recyclerview 的 post 运行 方法中,我将 nestedscrollview 滚动到 (0,0) 并且一切正常。
rvComments.setAdapter(adapterComment);
rvComments.post(new Runnable() {
@Override
public void run() {
nestedScrollView.scrollTo(0, 0);
}
});
我有一个包含 LinearLayout 和 RecyclerView(都在 RelativeLayout 中)的 NestedScrollView。
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/scroll">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lay_account">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:paddingTop="10dp"
android:id="@+id/lay_total"
android:paddingBottom="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/total"
android:id="@+id/lblTotal"
android:textSize="@dimen/text_medium"
android:layout_marginLeft="20dp"
android:textColor="@color/dark_eurakostheme_color"
android:textStyle="bold"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical|center_horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txtTotalAmount"
android:textSize="@dimen/text_extra_extra_large"
android:gravity="center_horizontal"
android:textColor="@color/eurakostheme_color"/>
<ImageView
android:layout_width="@dimen/icon_extra_extra_large"
android:layout_height="match_parent"
android:id="@+id/imageView3"
android:src="@drawable/coin_eurakos"/>
</LinearLayout>
</LinearLayout>
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:id="@+id/divisor"
android:background="@color/dividerColor"
android:layout_alignBottom="@+id/lay_total"/>
<android.support.v7.widget.RecyclerView
android:layout_below="@id/lay_total"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/rclBasketAmounts"
android:background="@android:color/white"
android:padding="10dp">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
将数据加载到 RecyclerView 后,我需要像这样以编程方式更改它的高度:
RelativeLayout.LayoutParams lay_params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
50 + ((int) (baskets.length * getResources().getDimension(R.dimen.list_height_small))));
lay_params.addRule(RelativeLayout.BELOW, lay_total.getId());
recyclerView.setLayoutParams(lay_params);
recyclerView.setAdapter(new ListBasketAmountAdapter(baskets));
问题是当数据完成加载时,NestedScrollView 滚动自动滚动到 RecyclerView 的顶部,隐藏其上方的 LinearLayout。有什么想法吗?
谢谢。
几天后,我找到了解决问题的办法。您只需要在 ScrollView
下的第一个布局中添加 descendantFocusability
,如下所示:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lay_account"
android:descendantFocusability="blocksDescendants">
kevings14 给出的解决方案有效,但对我的情况没有帮助。当我添加
时,我在NestedScrollView
下有一个 RecyclerView
+ 几个 EditText
android:descendantFocusability="blocksDescendants"
在滚动视图下的主布局中。我无法集中注意力 EditText
。
然后我想到了这个对我有用的解决方案。
<RelativeLayout
android:layout_width="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_height="wrap_content">
In my case, I use multiple RecyclerView inside NestedScrollView. Then it does not work for me. So my solution is, When my data update complete then I just scroll to top,
yourList.setAdapter(yourListAdapter);
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_UP);
//scrollView.scrollTo(0,0);
}
});
我有一个会自动向上滚动的 nestedscrollview。在 recyclerview 的 post 运行 方法中,我将 nestedscrollview 滚动到 (0,0) 并且一切正常。
rvComments.setAdapter(adapterComment);
rvComments.post(new Runnable() {
@Override
public void run() {
nestedScrollView.scrollTo(0, 0);
}
});