android-OnClickListener不适用于回收适配器内的视图
我有一个循环视图适配器,我实现了addOnItemTouchListener来监听每一行,它工作得很好 但是我有两个按钮在我的一行中,我已经为它们设置了OnClickListener,但是它没有被触发。这是我的代码:android-OnClickListener不适用于回收适配器内的视图,android,android-recyclerview,Android,Android Recyclerview,我有一个循环视图适配器,我实现了addOnItemTouchListener来监听每一行,它工作得很好 但是我有两个按钮在我的一行中,我已经为它们设置了OnClickListener,但是它没有被触发。这是我的代码: holder.register.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {
holder.register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ctx.startActivity(new Intent(ctx,Register.class));
}
});
我已经为我的按钮设置了android clickable,但没有做任何更改:
<TextView
android:id="@+id/register"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:clickable="true"
android:textColor="#fff" />
如何调用按钮的click listener而不是recycle view TouchListener 试试下面。
从xml中删除android:clickable。然后尝试setOnClickListener
<TextView
android:id="@+id/register"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:textColor="#fff" />
尝试这种方法,从xml文件中删除click event
android:clickable=“true”
,并将下面的代码添加到bindview holder中
holder.detailimage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ctx, MainActivity.class);
ctx.startActivity(intent);
}
});
这里是一个片段
// adaptor
public class youradaptor extends RecyclerView.Adapter<youradaptor.ViewHolder>
{
// create variable
OnItemClickListener mOnItemClickListener;
@Override
public void onBindViewHolder(Holder holder, int position)
{
holder.register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
mOnItemClickListener.click(position);
}
});
}
//interface for Click-listener
public interface OnItemClickListener
{
// method name which you can call in main class
void click(int position);
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener)
{
mOnItemClickListener = onItemClickListener;
}
}
首先,正如您所说,您已经为每一行实现了
TouchListener
。所以你的整行都在听触摸,所以同一行中的另一个触摸事件会产生影响
您需要为每个子级重写onInterceptTouchEvent(),否则,它将仍然是父级的onTouchEvent
更好地在视图持有者本身中实现onClick
事件。使用OnclickListener
而不是touchtlistener
<TextView
android:id="@+id/register"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:textColor="#fff" />
希望有帮助:)我能知道为什么要为列表项设置TouchListner吗?显示xml和适配器类发布整个适配器代码和xml代码。