RecyclerView 中自定义视图的 OnClickListener
OnClickListener for CustomView in RelyclerView
我需要为 CutomView
(按钮)设置 OnClickListener
,它位于 RelyclerView
中。问题是我可以点击 View
,但不能点击 CustomView
。有什么想法吗?
我是这样抓点击的:
我的自定义适配器:
...
@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
}
}
}
}
...
从您发布的任何代码来看,您似乎没有将 onClickListener
设置为正确的视图。在您的代码中,
view.setOnClickListener(TestActivity.myOnClickListener);
您正在将 onClickListener
设置为视图,而您想将其设置为自定义视图(按钮)。所以假设在你的 rv.xml
文件中,你的自定义视图(按钮)定义为 id 为 button_map_1
,那么你的代码应该是
view.findViewById(R.id.button_map_1).setOnClickListener(TestActivity.myOnClickListener);
这将在按钮 button_map_1
上设置 onClickListener
。
我建议您在适配器内部创建一个侦听器来捕获您的视图点击。然后 activity 可以使用 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);
}
}
};
}
我需要为 CutomView
(按钮)设置 OnClickListener
,它位于 RelyclerView
中。问题是我可以点击 View
,但不能点击 CustomView
。有什么想法吗?
我是这样抓点击的:
我的自定义适配器:
...
@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
}
}
}
}
...
从您发布的任何代码来看,您似乎没有将 onClickListener
设置为正确的视图。在您的代码中,
view.setOnClickListener(TestActivity.myOnClickListener);
您正在将 onClickListener
设置为视图,而您想将其设置为自定义视图(按钮)。所以假设在你的 rv.xml
文件中,你的自定义视图(按钮)定义为 id 为 button_map_1
,那么你的代码应该是
view.findViewById(R.id.button_map_1).setOnClickListener(TestActivity.myOnClickListener);
这将在按钮 button_map_1
上设置 onClickListener
。
我建议您在适配器内部创建一个侦听器来捕获您的视图点击。然后 activity 可以使用 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);
}
}
};
}