在 FirestoreRecyclerAdapter 上使用接口实现 onLongClick

Implementing onLongClick with interface on FirestoreRecyclerAdapter

我有一个自定义 FirestoreRecyclerAdapter,我需要通过 "parent" class 的接口获取项目的 Firestore ID。我想使用 onLongClickListener select Recyclerview 中的多个项目并更改状态 (selected/unselected)。我已经尝试以与本教程的帮助下实现 OnClickListener 相同的方式实现 OnLongClickListener 和接口:https://codinginflow.com/tutorials/android/firebaseui-firestorerecycleradapter/part-6-onitemclicklistener 但它不起作用。

我应该在父 class 中实现它吗?

public class Adapter extends FirestoreRecyclerAdapter<someClass, Adapter.Holder> {


        public Adapter(@NonNull FirestoreRecyclerOptions<someClass> options) {
            super(options);
        }

        @Override
        protected void onBindViewHolder(@NonNull Adapter.Holder Holder, int i, @NonNull someClass classVar) {
            Holder.content.setText(classVar.getContent());
            Holder.title.setText(classVar.getTitle());
        }

        publicAdapter.Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.some_layout, parent, false);
            return new Adapter.Holder(v);
        }


        class Holder extends RecyclerView.ViewHolder {
            TextView Title, Content;

            public Holder(@NonNull final View itemView) {
                super(itemView);
                Title = itemView.findViewById(R.id.Title);
                Content = itemView.findViewById(R.id.Content);
                itemView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        getAdapterPosition();
                        return false;
                    }
                });
            }
        } }

您可以在您的 viewHolder 上实现点击监听器:

class Holder extends RecyclerView.ViewHolder implements View.OnLongClickListener {
  TextView Title, Content;

  public Holder(@NonNull final View itemView) {
    super(itemView);
    Title = itemView.findViewById(R.id.Title);
    Content = itemView.findViewById(R.id.Content);





    itemView.setOnLongClickListener(this);
  }

  @Override
  public void onLongClick(View v) {
    getAdapterPosition();
    return false;
  }
}

OnClickListener

这将监听您的 ItemView 点击次数

编辑: 将数据从 Adapter 传递到 Parent Activity 你可以做如下的事情:

public class MyActivity extends AppCompatActivity {

  private static MyActivity instance;
  public static MyActivity getInstance() {
    return instance;
  }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_request_now);
    instance = this;
  }
  
  public void doSomething(int passingValue){
  // use passingValue
  }

}

然后在您的适配器中:

public Holder(@NonNull final View itemView) {
    super(itemView);
    Title = itemView.findViewById(R.id.Title);
    Content = itemView.findViewById(R.id.Content);
    itemView.setOnLongClickListener(this);
  }

  @Override
  public void onLongClick(View v) {
    
    MyActivity.getInstance().doSomething(getAdapterPosition());
    // just Make sure your activity isn't somehow Null
    
    return false;
  }

@xblaz3kx 首先你必须像这样定义你的界面。

public interface LongKeyPressedEventListner {
    void longKeyPressed(int position);
}

然后在你的适配器中

   public class Adapter extends FirestoreRecyclerAdapter<someClass, Adapter.Holder> {

        LongKeyPressedEventListner longKeyPressedEventListner

        public Adapter(@NonNull FirestoreRecyclerOptions<someClass> options,LongKeyPressedEventListner longKeyPressedEventListner) {
            this.longKeyPressedEventListner = longKeyPressedEventListner;
            super(options);
        }

 @Override
        protected void onBindViewHolder(@NonNull Adapter.Holder Holder, int i, @NonNull someClass classVar) {
            Holder.content.setText(classVar.getContent());
            Holder.title.setText(classVar.getTitle());

            Holder.layout.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                         int pos = getAdapterPosition();
                         longKeyPressedEventListner.longKeyPressed(pos); // call interface method
                        return false;
                    }
                });

        }

        publicAdapter.Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.some_layout, parent, false);
            return new Adapter.Holder(v);
        }


class Holder extends RecyclerView.ViewHolder {
            TextView Title, Content;
            RelativeLayout layout;

            public Holder(@NonNull final View itemView) {
                super(itemView);
                Title = itemView.findViewById(R.id.Title);
                Content = itemView.findViewById(R.id.Content);
                layout = (RelativeLayout)itemView.findViewById(R.id.main_layout);

            }
        } 
}

然后在你的 Activity

public class AddToBBDActivity extends Activity implements LongKeyPressedEventListner {

 @Override
    public void longKeyPressed(int position){

// you will get the position of long press 
}

}