Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Recyclerview不可点击android studio(可能是我的代码错误?)_Java_Android_Android Recyclerview - Fatal编程技术网

Java Recyclerview不可点击android studio(可能是我的代码错误?)

Java Recyclerview不可点击android studio(可能是我的代码错误?),java,android,android-recyclerview,Java,Android,Android Recyclerview,所以我有一个回收视图,里面有两个标签和一个图像。我需要在单击此recyclerView时导航到第二个活动..我不知道我做错了什么..我的意思是我的recyclerView仍然不可单击 主要活动代码: RecyclerView relative1 = (RecyclerView) findViewById(R.id.result_list); relative1.setOnClickListener(new View.OnClickListener(){ @

所以我有一个回收视图,里面有两个标签和一个图像。我需要在单击此recyclerView时导航到第二个活动..我不知道我做错了什么..我的意思是我的recyclerView仍然不可单击

主要活动代码:

RecyclerView relative1 = (RecyclerView) findViewById(R.id.result_list);
        relative1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                // viewResults class is the class that starts the second activity.
                startActivity(new Intent(getApplicationContext(),ViewResults.class));
            }
        });
这是ViewResults.java

public class ViewResults extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
     //here i try to start the new activity when recycler view is clicked
        setContentView(R.layout.secondActivity);
    }
}

在适配器类中,使用holder.itemView.setOnClickListener

holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           Context context = holder.itemView.getContext();
           Toast.makeText(context, "Your logic comes here", Toast.LENGTH_SHORT).show(); 
        }
    })
并删除了这段代码,因为您需要在RecyclerView中的各个视图上设置单击侦听器,而不是整个RecyclerView

recyclerView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                }
 });

如果要从activity类设置单击,请在adapter类中创建接口。输入适配器代码。

public class AdapterClass_Recycler extends RecyclerView.Adapter<AdapterClass_Recycler.ViewClass> {
Context context;
private static ClickListener clickListener;

public AdapterClass_Recycler(MainActivity mainActivity) {

    this.context = mainActivity;
}


@NonNull
@Override
public ViewClass onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    LayoutInflater layoutInflater = LayoutInflater.from(context);
    View view = layoutInflater.inflate(R.layout.item_view, null);

    return new ViewClass(view);
}

@Override
public void onBindViewHolder(@NonNull ViewClass viewClass, int i) {


}

@Override
public int getItemCount() {
    return length;
}


public class ViewClass extends RecyclerView.ViewHolder implements View.OnLongClickListener, View.OnClickListener {


    public ViewClass(@NonNull View itemView) {
        super(itemView);

        itemView.setOnClickListener(this);
        itemView.setOnLongClickListener(this);


    }

    @Override
    public void onClick(View v) {
        clickListener.onItemClick(getAdapterPosition(), v);
    }

    @Override
    public boolean onLongClick(View v) {
        clickListener.onItemLongClick(getAdapterPosition(), v);
        return false;
    }

}


public void setOnItemClickListener(ClickListener clickListener) {
    AdapterClass_Recycler.clickListener = clickListener;
}

public interface ClickListener {
    void onItemClick(int position, View v);
    void onItemLongClick(int position, View v);
}

你想让整个RecyclerView都可以点击吗?@Giorgosnokleus是的mate@tryingmybest那么你希望recyclerview作为一个整体是可点击的?不是其中的项目(这是通常的用例)?如果是这样,您可能必须使用
setClickable
setFocusable
您无法使RecycleView可点击,它会覆盖onTouchEvent,并且不会处理点击。您可以尝试使用GestureDetector处理单击或扩展RecyclerView并返回单击逻辑。
 adapterClassObject.setOnItemClickListener(new AdapterClass_Recycler.ClickListener() {
        @Override
        public void onItemClick(int position, View v) {
            Toast.makeText(MainActivity.this, "Click"+position, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onItemLongClick(int position, View v) {
            Toast.makeText(MainActivity.this, "Long"+position, Toast.LENGTH_SHORT).show();
        }
    });