RelyclerView中的CustomView的OnClickListener

时间:2016-01-30 19:33:56

标签: android android-recyclerview onclicklistener

我需要为OnClickListener设置CutomView(按钮),RelyclerView。问题是我可以点击View,但不能点击CustomView。有什么想法吗?

我以这种方式抓住了点击:

我的CustomAdapter:

...
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rv, parent, false);

        view.setOnClickListener(TestActivity.myOnClickListener);

        return new MyViewHolder(view);
    }
...

在MainActivity中:

...
private static class MyOnClickListener implements View.OnClickListener {

        private final Context context;

        private MyOnClickListener(Context context) {
            this.context = context;
        }

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.button_map_1: {
            }
                Toast.makeText(context, "Clicked", Toast.LENGTH_SHORT).show();
                // And nothing happens
            }
        }
        }
    }
...

2 个答案:

答案 0 :(得分:0)

根据您发布的任何代码,您似乎没有将onClickListener设置为正确的视图。在您的代码中,

view.setOnClickListener(TestActivity.myOnClickListener);

您正在将onClickListener设置为视图,而您想将其设置为自定义视图(按钮)。因此,假设在rv.xml文件中,您的自定义视图(按钮)的ID定义为button_map_1,那么您的代码应为

view.findViewById(R.id.button_map_1).setOnClickListener(TestActivity.myOnClickListener);

这会在按钮onClickListener上设置button_map_1

答案 1 :(得分:0)

我建议您在适配器中创建一个侦听器来捕获您的视图点击次数。然后,活动可以使用setChildClickListener附加到适配器上。

像这样:

class MyAdapter
{
    View.OnClickListener mOnClickListener;

    public void setChildClickListener(View.OnClickListener l)
    {
        mOnClickListener = l;
    }

    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rv, parent, false);

        view.setOnClickListener(mClicks);

        return new MyViewHolder(view);
    }

    View.OnClickListener mClicks = new View.OnClickListener()
    {
        @Override
        public void onClick(View v) {
            if (null != mOnClickListener) {
                mOnClickListener.onClick(v);
            }
        }
    };
}