Как прокрутить до определенной позиции в обзоре переработчика внутри прокрутки?
Я много искал по моему запросу, и ни один из них не был полезен. У меня есть представление реселлера и некоторые статические данные в представлении прокрутки, которое находится внутри корневого родительского макета, как показано ниже.
Я установил -
scrollview.scrollto(0,0);
потому что каждый раз, когда я открываю действие, оно переходит к первому элементу просмотра и повторяет статические данные над просмотром.
recyclerview.setNestedScrollingEnabled(false);
recyclerview.setfocusable(false);
для плавной прокрутки.
проблема в том,
layoutmanager.scrollToPositionWithOffset(pos,0);
это не работает. Я установил вышеуказанную линию после установки адаптера на утилиту просмотра. Также пытался с NestedScrollView, но тщетно.
хотя я использовал
layoutmanager.scrollToPosition(pos);
Для тех, кто пропускает код, я установил match_parent в ScrollView и fillviewport в true.
Вот мой макет.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/bottomsheet"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.inkdrops.khaalijeb.BrandCouponActivity">
<RelativeLayout
android:id="@+id/inclusionviewgroup"
android:layout_width="match_parent"
android:layout_height="match_parent">
<static data/>
<ScrollView
android:id="@+id/scrollviewmain"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/one"
android:fillViewport="true"
android:scrollbars="none"
android:layout_above="@+id/donelayout">
<staticdata/>
<TextView
android:id="@+id/dealstext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/card1"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:textSize="16sp"
android:text="Deals & Coupons"
android:textColor="#444444" />
<RelativeLayout
android:id="@+id/recyclerlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/dealstext"
android:layout_marginTop="5dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:background="@color/colorbackground">
<android.support.v7.widget.RecyclerView
android:id="@+id/coupon_rec_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorbackground"
android:visibility="visible"/>
</RelativeLayout>
<statisdata>
</RelativeLayout>
</ScrollView>
include layout="@layout/activity_coupons"
android:visibility="gone"
/>
</RelativeLayout>
</RelativeLayout>
5 ответов
Надо прокрутить ScrollView
получив верхнюю позицию RecyclerView
дитя:
float y = recyclerView.getY() + recyclerView.getChildAt(selectedPosition).getY();
scrollView.smoothScrollTo(0, (int) y);
Вы можете использовать метод просмотра прокрутки, чтобы достичь желаемого местоположения как:
scrollView.smoothScrollTo(int x, int y);
Я знаю, что отвечаю довольно поздно, но если у вас возникла проблема с автопрокруткой, вам нужно добавить android:downndantFocusability="blocksDescendants" в свой RelativeLayout. Итак, ваш тег RealtiveLyout будет выглядеть так:
<RelativeLayout
android:id="@+id/inclusionviewgroup"
android:layout_width="match_parent"
android:descendantFocusability="blocksDescendants"
android:layout_height="match_parent">
Используйте этот метод scrollToPosition (int position), это работа для меня. Надеюсь, что это поможет вам.
mMessagesRecyclerView = (RecyclerView) findViewById(R.id.messagesRecyclerView);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setStackFromEnd(true);
mMessagesRecyclerView.setLayoutManager(layoutManager);
mMessagesAdapter = new MessagesAdapter();
mMessagesRecyclerView.setAdapter(mMessagesAdapter);
mMessagesRecyclerView.scrollToPosition(your position);
это мой макет
Шаг 1: Добавьте эту строку для выбора этой позиции в обзоре переработчика
adaptercat.setSelectedItem(Integer.parseInt(dealtypeid));
Шаг 2: Однажды проверьте ниже конструктор, получив текущую позицию
public CatgerotyAdapter(Context context, ArrayList<HashMap<String, String>> arraylist,String selectedPosition) {
this.context = context;
this.data = arraylist;
resultp = new HashMap<>();
currentItemPos=Integer.parseInt(selectedPosition)-1;
}
Шаг 3: И эта функция также в адаптере
public void setCurrentItem(int item)
{
this.currentItemPos = item;
}
Последний шаг 4. Добавьте эту функцию вне адаптера в вашем классе
private void onPagerItemClick2(Integer tag)
{
adaptercat.setCurrentItem(tag);
catsp.setAdapter(adaptercat);
}
Добавьте эту строку в ваш элемент списка.
((ClassName) context).onPagerItemClick2(position);