简体   繁体   中英

Android Material Design navigation drawer setClickListener

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);

        }
    }
}

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

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;
            }
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM