如何在 RecyclerView CustomAdapter 中启动 Activity
How to startActivity within RecyclerView CustomAdapter
我想将 startActivity()
添加到我的 CustomAdapter class 中的 onClick
侦听器。
CustomAdapter.java
:
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
import static androidx.core.content.ContextCompat.startActivity;
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private List<String> data;
public CustomAdapter (List<String> data){
this.data = data;
}
@Override
public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rowItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_view, parent, false);
return new ViewHolder(rowItem);
}
@Override
public void onBindViewHolder(CustomAdapter.ViewHolder holder, int position) {
holder.textView.setText(this.data.get(position));
}
@Override
public int getItemCount() {
return this.data.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView textView;
public ViewHolder(View view) {
super(view);
view.setOnClickListener(this);
this.textView = view.findViewById(R.id.textview);
}
@Override
public void onClick(View view) {
startActivity(new Intent(CustomAdapter.this, LoginActivity.class));
}
}
}
问题是我在 IDE 中遇到以下错误:
Cannot resolve constructor 'Intent(com.kenadams.app.CustomAdapter, java.lang.Class<com.kenadams.app.LoginActivity>)'
最初,我认为这是因为我的 CustomAdapter
class 是 static
。所以,我把它变成了非静态的。但是,问题仍然存在。请指导我如何实现这个意图。
而不是 CustomAdapter.this
startActivity(new Intent(CustomAdapter.this, LoginActivity.class));
使用您正在使用适配器的 Activity 上下文。
但是开始另一个 activity 的正确方法应该是从 activity 开始。也许您可以在 ViewHolder 中调用 activity 的方法。这将启动您想要的 activity
在您的客户适配器中 class 您需要使用构造函数获取上下文。
private Context mcon;
在构造函数中->
public CustomAdapter (Context _mcon, List<String> data){
this.mcon = _mcon;
this.data = data;
}
然后在onClickListener->
@Override
public void onClick(View view) {
mcon.startActivity(new Intent(mcon, LoginActivity.class));
}
我想将 startActivity()
添加到我的 CustomAdapter class 中的 onClick
侦听器。
CustomAdapter.java
:
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
import static androidx.core.content.ContextCompat.startActivity;
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private List<String> data;
public CustomAdapter (List<String> data){
this.data = data;
}
@Override
public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rowItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_view, parent, false);
return new ViewHolder(rowItem);
}
@Override
public void onBindViewHolder(CustomAdapter.ViewHolder holder, int position) {
holder.textView.setText(this.data.get(position));
}
@Override
public int getItemCount() {
return this.data.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView textView;
public ViewHolder(View view) {
super(view);
view.setOnClickListener(this);
this.textView = view.findViewById(R.id.textview);
}
@Override
public void onClick(View view) {
startActivity(new Intent(CustomAdapter.this, LoginActivity.class));
}
}
}
问题是我在 IDE 中遇到以下错误:
Cannot resolve constructor 'Intent(com.kenadams.app.CustomAdapter, java.lang.Class<com.kenadams.app.LoginActivity>)'
最初,我认为这是因为我的 CustomAdapter
class 是 static
。所以,我把它变成了非静态的。但是,问题仍然存在。请指导我如何实现这个意图。
而不是 CustomAdapter.this
startActivity(new Intent(CustomAdapter.this, LoginActivity.class));
使用您正在使用适配器的 Activity 上下文。
但是开始另一个 activity 的正确方法应该是从 activity 开始。也许您可以在 ViewHolder 中调用 activity 的方法。这将启动您想要的 activity
在您的客户适配器中 class 您需要使用构造函数获取上下文。
private Context mcon;
在构造函数中->
public CustomAdapter (Context _mcon, List<String> data){
this.mcon = _mcon;
this.data = data;
}
然后在onClickListener->
@Override
public void onClick(View view) {
mcon.startActivity(new Intent(mcon, LoginActivity.class));
}