java将按钮OnClick与RecyclerView in Fragment中的行OnClick分开
我试图用接口分离片段内部的句柄OnClick按钮和OnClick行
到目前为止,我一直在尝试:
内部片段
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放在适配器中。。但是如果我这样做了,我就无法打开OpenDialog()、OpenDatabase()等。如果只能通过适配器来完成,我如何才能打开OpenDialog();
、OpenDatabase();
等?如果可能的话,我想把它放在片段中,而不是适配器中
内部适配器
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我认为这不适合我的需要(不是尝试所有答案)
直到现在,我还没有找到符合我需求的答案
如果我的问题难以理解,请原谅。谢谢你的回复
共 (0) 个答案