Reputation: 5406
im trying to conver my old app to new android Material design.but in my onclick
event i cannot work with my getSupportFragmentManager()
method.i have no idea what am i doing wrong in here..
public class DrawerListAdapter extends RecyclerView.Adapter<DrawerListAdapter.DrawerViewHolder> {
private Context context;
private Activity activity;
private LayoutInflater inflater;
List<info> data = Collections.emptyList();
public DrawerListAdapter(Context context, List<info> data) {
inflater = LayoutInflater.from(context);
this.data = data;
this.context = context;
}
@Override
public DrawerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.custome_row, parent, false);
DrawerViewHolder holder = new DrawerViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(DrawerViewHolder holder, int position) {
info current = data.get(position);
holder.title.setText(current.title);
holder.icon.setImageResource(current.iconId);
holder.setClickListener(new DrawerViewHolder.ClickListener() {
@Override
public void onClick(View v, int position, boolean isLongClick) {
switch (position) {
case 1:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, Fragment_home.newInstance(),
Fragment_home.TAG).commit();
break;
case 2:
break;
}
}
});
}
@Override
public int getItemCount() {
return data.size();
}
static class DrawerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView title;
ImageView icon;
private ClickListener clickListener;
public DrawerViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.text_title);
icon = (ImageView) itemView.findViewById(R.id.imageView);
itemView.setOnClickListener(this);
}
/* Interface for handling clicks - both normal and long ones. */
public interface ClickListener {
/**
* Called when the view is clicked.
*
* @param v view that is clicked
* @param position of the clicked item
* @param isLongClick true if long click, false otherwise
*/
public void onClick(View v, int position, boolean isLongClick);
}
/* Setter for listener. */
public void setClickListener(ClickListener clickListener) {
this.clickListener = clickListener;
}
@Override
public void onClick(View view) {
clickListener.onClick(view, getPosition(), false);
}
}
}
Upvotes: 4
Views: 357
Reputation: 281
I'd suggest setting up your drawer using the NavigationView class from the Android design support library, which also allows menu inflation from xml resources. You'd then handle clicks by registering a NavigationView.NavigationItemSelectedListener
Upvotes: 1
Reputation: 3588
Its very Simple implement OnClickListener in your ViewHolder and then in onClclick method use getAdapterPosition() method. please check the code given below.. It will help you
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public ViewHolder(View itemView) {
super(itemView);
itemView.setClickable(true);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Log.e(TAG, "POSITION " + getAdapterPosition());
switch (getAdapterPosition()) {
case 0:
break;
case 1:
break;
case 2:
break;
}
}
}
Upvotes: 1