安卓材料设计导航抽屉设置点击监听器

4

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

        }
    }
}

设置监听器的方式不正确吗? - hash
我不太了解RecyclerView,但可以尝试使用holder.textView(tukka)监听器。 - Tushar Pandey
我在这里使用 getSupportFragmentManager() 出现了错误。 - hash
你需要扩展ActionBarActivity。 - mmlooloo
你需要做以下两件事情:1)将你的Activity扩展为ActionBarActivity。2)或者将getSupportFragmentManager()更改为getFragmentManager()注意:如果使用的API低于11,则扩展ActionBarActivity并使用getSupportFragmentManager()。如果API高于11,则扩展Activity并使用getFragmentManager() - Anggrayudi H
显示剩余2条评论
2个回答

1

非常简单,在您的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;
            }
        }
    }

1
我建议使用Android设计支持库中的NavigationView类来设置抽屉,该类还允许从xml资源进行菜单填充。然后,您可以通过注册NavigationView.NavigationItemSelectedListener来处理点击事件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接