gpt4 book ai didi

java - 将 Button OnClick 与 Fragment 中 RecyclerView 内的 Row OnClick 分开

转载 作者:行者123 更新时间:2023-12-04 15:37:49 25 4
gpt4 key购买 nike

我正在尝试使用界面将 Fragment 中的 OnClick 按钮和 OnClick 行分开处理。

到目前为止,这是我尝试过的:

内部 fragment

if (recyclerView.getTag().toString().equals("Grid")) {
adapter = new RVAdapter(ListOfdataAdapter, getContext(),
RVAdapterChannel.ViewType.GRID_LIST_LAYOUT, new ClickListener() {
@Override
public void OnClick(int position, View view) {
//THIS ALWAYS RETURN ROW CLICKED
if (view.findViewById(R.id.imageLike).getId() == view.getId()){
Toast.makeText(getContext(), "IMAGE LIKE CLICKED",Toast.LENGTH_SHORT).show();
OpenDialog();
}
if (view.findViewById(R.id.layoutRelative).getId() == view.getId()){
Toast.makeText(getContext(), "ROW CLICKED", Toast.LENGTH_SHORT).show();
OpenDatabase();
}

//THIS MAKES APP CRASH
if (view.findViewById(R.id.imageLike).performClick){
Toast.makeText(getContext(), "IMAGE LIKE CLICKED",Toast.LENGTH_SHORT).show();
OpenDialog();
}
if (view.findViewById(R.id.layoutRelative).performClick){
Toast.makeText(getContext(), "ROW CLICKED", Toast.LENGTH_SHORT).show();
OpenDatabase();
}
// ANOTHER TRY
}

@Override
public void onLongClicked(int position, View view) {
}
});

recyclerView.setAdapter(adapter);
if (getPreferenceValue().equals("on")) {
AnimBottomToTop();
}
}

目前只有一个符合我的预期,那就是如果我把If - Else放在adapter中..但是如果我这样做了,我就无法打开OpenDialog(), OpenDatabase()等,如果可以的话只能通过适配器完成,如何打开 OpenDialog();OpenDatabase(); 等?如果可能的话,我想将它放在 fragment 中而不是适配器中。

内部适配器

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{
RelativeLayout Container;
ImageView ImageLike;
//...//
private WeakReference<ClickListener> listenerRef;


public ViewHolder(View itemView, ClickListener listener) {

super(itemView);

listenerRef = new WeakReference<>(listener);;
ImageLike = (ImageView) itemView.findViewById(R.id.imageLike) ;
//...//

//itemView.setOnClickListener(this);
itemView.setOnClickListener(this);
Container.setOnClickListener(this);
ImageLike.setOnClickListener(this);
ImageLike.setOnLongClickListener(this);
}

// onClick Listener for view
@Override
public void onClick (View view) {
//THIS WILL RETURN TOAST ON IMAGELIKE CLICK
if (view.getId() == ImageLike.getId()) {
Toast.makeText(view.getContext(), "IMAGE LIKE CLICKED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
} //THIS WILL RETURN TOAST ON ROW CLICK
else {
Toast.makeText(view.getContext(), "ROW CLICKED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
}
listenerRef.get().OnClick(getAdapterPosition(), itemView);
}

//onLongClickListener for view
@Override
public boolean onLongClick(View view) {

final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("Hello Dialog")
.setMessage("LONG CLICK DIALOG WINDOW FOR ICON " + String.valueOf(getAdapterPosition()))
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

}
});

builder.create().show();
listenerRef.get().onLongClicked(getAdapterPosition(), itemView);
return true;
}
}

我从这里使用这个方法Onclick for each button inside RecyclerView items

从这里开始RecyclerView onClick我认为这不符合我的需要(不尝试所有答案)

到现在还没找到符合自己需求的答案。

如果我的问题难以理解,请原谅我。感谢您的回复。

最佳答案

代替itemView

listenerRef.get().OnClick(getAdapterPosition(), itemView);
listenerRef.get().onLongClicked(getAdapterPosition(), itemView);

从您的 onClickonLongClick 监听器返回 view,如下所示:

listenerRef.get().OnClick(getAdapterPosition(), view);  
listenerRef.get().onLongClicked(getAdapterPosition(), view);

然后在你的 fragment 中,这样做

@Override
public void OnClick(int position, View view) {

if (R.id.imageLike == view.getId()){
Toast.makeText(getContext(), "IMAGE LIKE CLICKED",Toast.LENGTH_SHORT).show();
OpenDialog();
}

if (R.id.layoutRelative == view.getId()){
Toast.makeText(getContext(), "ROW CLICKED", Toast.LENGTH_SHORT).show();
OpenDatabase();
}
}

关于java - 将 Button OnClick 与 Fragment 中 RecyclerView 内的 Row OnClick 分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59132791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com