簡體   English   中英

Android Material Design導航抽屜setClickListener

[英]Android Material Design navigation drawer setClickListener

即時通訊試圖將我的舊應用程序轉換為新的Android Material design.but在我的onclick事件中,我無法使用我的getSupportFragmentManager() 。我不知道我在這里做錯了什么..

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

        }
    }
}

我建議使用Android設計支持庫中的NavigationView類設置您的抽屜,這也允許從xml資源中進行菜單膨脹。 然后,您可以通過注冊NavigationView.NavigationItemSelectedListener處理點擊

它非常簡單,在ViewHolder中實現OnClickListener ,然后在onClclick方法中使用getAdapterPosition()方法。 請檢查下面給出的代碼..它會對你有所幫助

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM