在 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
}
}
我有一个自定义 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
}
}