Android 短按不在Recyclerview项目中工作

Android 短按不在Recyclerview项目中工作,android,android-recyclerview,Android,Android Recyclerview,我有一个包含复选框的recyclerview。我已经实现了单击该复选框的侦听器。但我现在的问题是,复选框只有在我长时间按下时才起作用。 这是我的密码 我的Recyclerview项目 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match

我有一个包含复选框的recyclerview。我已经实现了单击该复选框的侦听器。但我现在的问题是,复选框只有在我长时间按下时才起作用。 这是我的密码

我的Recyclerview项目

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:background="@color/cardview_light_background"
    android:orientation="vertical">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="200dp">

    <ImageView
        android:id="@+id/PROJECT_image"
        android:layout_width="match_parent"
        android:layout_height="@dimen/list_item_avatar_size"
        android:background="@drawable/mirlogo"
        android:scaleType="fitXY" />
    <RelativeLayout
        android:id="@+id/label"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@drawable/labelsale"/>

    <CheckBox
        android:id="@+id/PROJECT_fav"
        android:layout_width="30sp"
        android:layout_height="30sp"
        android:background="@drawable/selector"
        android:button="@null"
        android:layout_margin="10dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />
</RelativeLayout>
</RelativeLayout>

我的适配器

public class HomeDataManager extends RecyclerView.Adapter<HomeDataManager.RecyclerViewHolder> {

    public static class RecyclerViewHolder extends RecyclerView.ViewHolder {

        TextView mProjectName;
        ImageView mImage;
        CheckBox mCheck;


        RecyclerViewHolder(View itemView) {
            super(itemView);
            mProjectName = (TextView) itemView.findViewById(R.id.PROJECT_name);
            mImage = (ImageView) itemView.findViewById(R.id.PROJECT_image);
            mCheck = (CheckBox) itemView.findViewById(R.id.PROJECT_fav);

        }
    }

    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recyclerview_item, viewGroup, false);
        return new RecyclerViewHolder(v);
    }

    @Override
    public void onBindViewHolder(final RecyclerViewHolder viewHolder, int i) {
        // get the single element from the main array

        final HomeProjects projects = HomeProjects.PROJECTS[i];
        // Set the values
        viewHolder.mProjectName.setText(projects.get(HomeProjects.Field.NAME));
        viewHolder.mImage.setImageResource(projects.geti(HomeProjects.Field.IMAGE));
        viewHolder.mCheck.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Snackbar snackbar = Snackbar.make(v, "Item Favorited", Snackbar.LENGTH_SHORT);
                snackbar.show();
            }
        });

    }


    @Override
    public int getItemCount() {

        return HomeProjects.PROJECTS.length;
    }


}
公共类HomeDataManager扩展了RecyclerView.Adapter{
公共静态类RecyclerView.ViewHolder扩展了RecyclerView.ViewHolder{
TextView mProjectName;
图像视图模拟图像;
复选框mCheck;
RecycleServiceWholder(查看项目视图){
超级(项目视图);
mProjectName=(TextView)itemView.findViewById(R.id.PROJECT\u name);
mImage=(ImageView)itemView.findViewById(R.id.PROJECT\u image);
mCheck=(复选框)itemviewbyd(R.id.PROJECT\u fav);
}
}
@凌驾
public RecycleServiceWholder onCreateViewHolder(视图组视图组,int i){
视图v=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.recyclerview_项,viewGroup,false);
退回新的回收商(v);
}
@凌驾
BindViewHolder上的公共void(最终回收器Wiholder viewHolder,int i){
//从主数组中获取单个元素
最终HomeProjects=HomeProjects.projects[i];
//设置值
viewHolder.mProjectName.setText(projects.get(HomeProjects.Field.NAME));
viewHolder.mImage.setImageResource(projects.geti(HomeProjects.Field.IMAGE));
viewHolder.mCheck.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Snackbar Snackbar=Snackbar.make(v,“项目偏好”,Snackbar.LENGTH\u SHORT);
snackbar.show();
}
});
}
@凌驾
public int getItemCount(){
返回HomeProjects.PROJECTS.length;
}
}

删除自定义的RecyclerClickListener,并在RecyclerServiceWholder的构造函数中实现setOnCheckedChangeListener for复选框

itemView.mCheck.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(){
//Implement your code here}});
对于处理RecyclerlayoutClicks: 此代码应在RecycleServiceWholder类的构造函数中使用

itemView.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
//Your Code}});

尝试了您的代码(删除xml中未包含的view ProjectName),复选框在onClick上运行良好。您能提供更多信息吗?需要projectname。我刚刚从这里发布的代码中删除了它,因为我对“单击仅”复选框有问题。复选框工作正常。但我的问题是,我应该长按复选框才能工作。否则,它将转到已定义的下一个活动(我没有将其包括在这里)。很抱歉,不了解您的需求。您的复选框仅在长时间单击时有效,而当您简单地单击它时,它会将您带到另一个活动(可能您设置了另一个接收事件的onClickListener),或者您只是希望在长时间单击时触发您的复选框?我只需要简单地单击我的复选框。但它不起作用。看看这个答案: