java - Android Material Design 抽屉导航 setClickListener

标签 java android android-fragments

我正在尝试将我的旧应用程序转换为新的 android Material design。但是在我的 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

来处理点击

关于java - Android Material Design 抽屉导航 setClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27741507/

相关文章:

android - 如何检查应用用户是否在 Google Play Beta 测试中

android - 为什么 Android 2.2 会抛出安全警告,而 Android 4.2 不会?

java - 使用适配器中的不同数据更新不同 ListView 中的常见帖子

java - 为什么我的应用程序中的电子邮件验证总是出错?

Java:GridLayout 上的动画 Sprite 第 2 部分

java - 如何在 java 中的 Cassandra 中注释/使用复合分区键?

java - 服务器响应 404 - POST 请求

java - 密码加密和通过网络发送的最佳方法

android - 谷歌商店说准备发布

android - 如何从fragment中隐藏Recyclerview的行项目