I am trying to separate handle OnClick Button and OnClick Row inside Fragment with interface..
so far, this is what I have tried :
Inside 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();
}
}
at the moment only one is in line with my expectation, that is, if I place If - Else inside the adapter.. but if I do, I cannot open OpenDialog (), OpenDatabase (), etc. If it can only be done through an adapter, how can I open OpenDialog();
, OpenDatabase();
, etc? and if possible I want to place it in fragments not in adapters.
Inside Adapter
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;
}
}
I use this method from here Onclick for each button inside RecyclerView items
And from here RecyclerView onClick i think this not suit my needs to (not trying all answers)
until now I have not found an answer according to my needs.
forgive me if my question is difficult to understand. thanks for your response.