如何从 recyclerview 适配器开始显示带有 Lottie 动画的小吃店

How to show a snakbar with Lottie animation in start from a recycler view adapter

我正在制作一个聊天应用程序,我想添加一个功能,例如电报以通过长按自动 link.I 复制 links、phone 号码等。使用 this library to add long click listeners on a auto link.I implemented it successfully.But when I do this, i want to show a Lottie animation in the start like this 但长按 link。 我尝试了很多答案,但我得到一个 exception.I 已经为自定义 snakbar.It 制作的布局如下

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="56dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_margin="@dimen/_3sdp"
android:backgroundTint="@color/snakbar_background"
app:cardCornerRadius="@dimen/_4sdp">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical">

    <com.airbnb.lottie.LottieAnimationView
        android:id="@+id/lottieSnakbar"
        android:layout_width="35dp"
        android:layout_height="35dp"
        android:layout_marginStart="@dimen/_5sdp"
        android:layout_marginEnd="@dimen/_10sdp"
        app:lottie_rawRes="@drawable/copy"
        app:lottie_autoPlay="true"
        app:lottie_loop="false"/>

    <TextView
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text="Text copied to clipboard"
        android:gravity="center_vertical"
        android:theme="?snackbarTextViewStyle"
        tools:ignore="HardcodedText" />

</LinearLayout>

</androidx.cardview.widget.CardView>

现在我该如何实现?

您可以使用 localBroadcast 并从适配器广播本地信号,让另一个 Activity(可能是接收器)处理 snakbar。

AdapterClass{
   LocalBroadcastManager localBroadcastManager = null;
   
   void sendB(parms){
      if(localBroadcastManager != null){
            localBroadcastManager.sendBroadcast(Intent("NOTIFICATION_RECEIVER"))
      }

   onCreateViewHolder(){
       localBroadcastManager = LocalBroadcastManager.getInstance(applicationContext)
      }

  onBindViewHolder(){
      if(someCondition){
           sendB(parms);
    }
}

然后从 activity 接收它然后调用 snakBar

您可以使用适配器中的接口。并从 activity

接收并显示 snakbar