Android 短按不在Recyclerview项目中工作
我有一个包含复选框的recyclerview。我已经实现了单击该复选框的侦听器。但我现在的问题是,复选框只有在我长时间按下时才起作用。 这是我的密码 我的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
<?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),或者您只是希望在长时间单击时触发您的复选框?我只需要简单地单击我的复选框。但它不起作用。看看这个答案: