簡體   English   中英

MotionLayout 我無法將我的 RecyclerView 滾動到第一個位置

[英]MotionLayout i can't scroll my RecyclerView to first poisiton

我有一個 activity_motion_sec.xml 文件,如下所示。 此示例https://riggaroo.dev/android-motionlayout-tutorial-collapsing-view/幾乎相同。 我添加的是一個簡單的向上箭頭按鈕。 當按下向上箭頭按鈕時,我希望我的 recyclerview 滾動到 0。position。

activity_motion_sec.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout 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:orientation="vertical"
app:layoutDescription="@xml/base_scroll_scene"
app:showPaths="false">

<ImageView
    android:id="@+id/imageViewAvatar"
    android:layout_width="140dp"
    android:layout_height="0dp"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:scaleType="centerCrop"
    app:layout_constraintDimensionRatio="h,1:1"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:src="@drawable/bursa" />


<TextView
    android:id="@+id/textViewName"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="16dp"
    android:layout_marginBottom="8dp"
    android:fontFamily="@font/raleway_semibold"
    android:text="Veruca Salt "
    android:textAppearance="@style/TextAppearance.AppCompat.Display1"
    app:layout_constraintBottom_toTopOf="@+id/space"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/imageViewAvatar"
    app:layout_constraintTop_toTopOf="@+id/imageViewAvatar" />


<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerViewStatus"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/imageViewAvatar"
    >

</androidx.recyclerview.widget.RecyclerView>


<View
    android:id="@+id/my_view"
    android:layout_width="0dp"
    android:layout_height="30dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="@id/space"
    app:layout_constraintStart_toStartOf="parent"
    android:background="@drawable/bottom_gradient_mask"
    android:visibility="gone"/>

<ImageView
    android:id="@+id/up_arrow"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:src="@drawable/ic_arrow_upward_black_24dp"
    android:visibility="gone"
    app:layout_constraintEnd_toEndOf="@+id/space"
    app:layout_constraintTop_toTopOf="@+id/space"/>


<Space
    android:id="@+id/space"
    android:layout_width="match_parent"
    android:layout_height="8dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="@+id/imageViewAvatar"
    app:layout_constraintTop_toBottomOf="@id/imageViewAvatar" />

</androidx.constraintlayout.motion.widget.MotionLayout>

在 base_scroll_scene.xml 文件中,我可以處理向上箭頭按鈕的單擊事件。 Animation 在單擊按鈕時運行,但我無法設置 recyclerview position。

base_scroll_scene.xml

<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<Transition
    app:constraintSetEnd="@id/end"
    app:constraintSetStart="@id/start"
    app:duration="1000">
    <OnSwipe
        app:dragDirection="dragUp"
        app:touchAnchorId="@+id/recyclerViewStatus"
        app:touchAnchorSide="top" />
    <OnClick
        app:targetId="@id/up_arrow"
        app:clickAction="transitionToStart"/>
</Transition>

<ConstraintSet android:id="@+id/start">
    <Constraint
        android:id="@+id/recyclerViewStatus"
        />
</ConstraintSet>

<ConstraintSet android:id="@+id/end">

    <Constraint
        android:id="@id/imageViewAvatar"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />

    <Constraint
        android:id="@id/space"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="@+id/imageViewAvatar"
        app:layout_constraintTop_toBottomOf="@id/imageViewAvatar"/>

    <Constraint
        android:id="@+id/up_arrow"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:src="@drawable/ic_arrow_upward_black_24dp"
        android:visibility="visible"
        app:layout_constraintEnd_toEndOf="@+id/space"
        app:layout_constraintTop_toTopOf="@+id/space"/>

    <Constraint
        android:id="@+id/my_view"
        android:layout_width="0dp"
        android:layout_height="30dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="@id/space"
        app:layout_constraintStart_toStartOf="parent"
        android:background="@drawable/bottom_gradient_mask"
        android:visibility="visible"/>

</ConstraintSet>

</MotionScene>

我試圖在我的 java 文件中設置一個 ClickListener,但它不起作用。 視圖不監聽我在 MotionActivitySec.java 和 MotionActivitySec.java 中設置的事件監聽器

public class MotionActivitySec extends Activity {


@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_motion_sec);

    MyListData[] myListData = new MyListData[] {
            new MyListData("Email", android.R.drawable.ic_dialog_email),
            new MyListData("Info", android.R.drawable.ic_dialog_info),
            new MyListData("Delete", android.R.drawable.ic_delete),
            new MyListData("Dialer", android.R.drawable.ic_dialog_dialer),
            new MyListData("Alert", android.R.drawable.ic_dialog_alert),
            new MyListData("Map", android.R.drawable.ic_dialog_map),
            new MyListData("Email", android.R.drawable.ic_dialog_email),
            new MyListData("Info", android.R.drawable.ic_dialog_info),
            new MyListData("Delete", android.R.drawable.ic_delete),
            new MyListData("Dialer", android.R.drawable.ic_dialog_dialer),
            new MyListData("Alert", android.R.drawable.ic_dialog_alert),
            new MyListData("Map", android.R.drawable.ic_dialog_map),
    };

    final RecyclerView recyclerView = findViewById(R.id.recyclerViewStatus);
    MyAdapter adapter = new MyAdapter(myListData);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(adapter);

    ImageView imageView = findViewById(R.id.up_arrow);

    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(MotionActivitySec.this, "clicked", Toast.LENGTH_SHORT).show();
            recyclerView.scrollToPosition(0);
        }
    });
    
}
}

執行以下操作:

1.刪除

<OnClick
    app:targetId="@id/up_arrow"
    app:clickAction="transitionToStart"/>

2.在活動中,處理按鈕點擊本身

 upArrow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                root.transitionToEnd();
                //root.transitionToStart();
                recyclerViewStatus.getLayoutManager().scrollToPosition(0);
            }
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM