Java 意图在recyclerview onclick中不起作用
我创建了一个显示firebase用户列表的recyclerview,每当用户单击列表中的项目时,我想将用户发送到另一个活动,但每当我调用intent时,它总是说“CurrentActivity不是封闭标签”。 这是密码Java 意图在recyclerview onclick中不起作用,java,android,android-recyclerview,Java,Android,Android Recyclerview,我创建了一个显示firebase用户列表的recyclerview,每当用户单击列表中的项目时,我想将用户发送到另一个活动,但每当我调用intent时,它总是说“CurrentActivity不是封闭标签”。 这是密码 public class UserActivity extends AppCompatActivity { private Toolbar mToobar; private RecyclerView recyclerView;
public class UserActivity extends AppCompatActivity {
private Toolbar mToobar;
private RecyclerView recyclerView;
private UserAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user);
mToobar = findViewById(R.id.toolbar);
setSupportActionBar(mToobar);
Objects.requireNonNull(getSupportActionBar()).setTitle("Find New Friends");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mToobar.setTitleTextColor(Color.parseColor("WHITE"));
recyclerView = findViewById(R.id.recycler);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
//recyclerView.setHasFixedSize(true);
FirebaseRecyclerOptions<UserModel> options = new FirebaseRecyclerOptions.Builder<UserModel>()
.setQuery(FirebaseDatabase.getInstance().getReference().child("Users"), UserModel.class)
.build();
adapter = new UserAdapter(options);
recyclerView.setAdapter(adapter);
recyclerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(UserActivity.this, ProfileActivity.class);
startActivity(i);
}
});
}
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
}
有谁能帮助我更好地实现
onClickListener
,请?在适配器类中使用holder.itemView.getContext()
,而不是UserActivity
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = holder.itemView.getContext();
Intent intent = new Intent(context, ProfileActivity.class);
context.startActivity(intent);
}
})
并删除了这段代码,因为您需要在RecyclerView中的各个视图上设置单击侦听器,而不是整个RecyclerView
recyclerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(UserActivity.this, ProfileActivity.class);
startActivity(i);
}
});
您还可以将View.onClickListener发送到列表的构造函数,如下所示:
View.onclick侦听器
public UserAdapter(@NonNull FirebaseRecyclerOptions<UserModel> options, View.onClickListener listener) {
super(options);
this.listener = listener;
}
在活动中,您需要在中实现接口View.onClickListener和
@Override
public void onClick(View v){
Intent i = new Intent(UserActivity.this, ProfileActivity.class);
startActivity(i);
}
创建适配器时,请使用以下代码:
FirebaseRecyclerOptions<UserModel> options = new FirebaseRecyclerOptions.Builder<UserModel>()
.setQuery(FirebaseDatabase.getInstance().getReference().child("Users"), UserModel.class)
.build();
adapter = new UserAdapter(options,this);
FirebaseRecyclerOptions选项=新建FirebaseRecyclerOptions.Builder()
.setQuery(FirebaseDatabase.getInstance().getReference().child(“用户”),UserModel.class)
.build();
适配器=新用户适配器(选项,此选项);
您正在将UserActivity作为当前活动传递。请将上下文传递给适配器构造函数
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.MyViewHolder>() {
private ArrayList<UserResult> userList;
private Activity mActivity;
public AdapterChatList(Activity mActivity, ArrayList<UserResult> mUserList) {
this.mActivity = mActivity;
this.userList = mUserList;
}
}
在定义适配器的活动中传递上下文
mUserAdapter = new UserAdapter (getActivity(), userArrayList);
recyclerView.setAdapter(mUserAdapter );
从活动中删除recyclerview的单击。只需在适配器中设置视图,单击即可。@Komal在删除它后仍然无法工作。请创建构造函数并传递上下文。并在adapterPlease检查中将其替换为您的Useractivity。@OscareMileOperezMartinez谢谢我已删除recyclerview上的onclick,但在adapter类中,它说ContextCompact中的startActivity不能应用Dok,抱歉我忘了它。请查看编辑后的答案请不要忘记接受我的答案并打勾:)非常感谢你的帮助。我已经得到了解决方案很高兴它帮助了你,请接受答案,如果它对你有用的话
FirebaseRecyclerOptions<UserModel> options = new FirebaseRecyclerOptions.Builder<UserModel>()
.setQuery(FirebaseDatabase.getInstance().getReference().child("Users"), UserModel.class)
.build();
adapter = new UserAdapter(options,this);
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.MyViewHolder>() {
private ArrayList<UserResult> userList;
private Activity mActivity;
public AdapterChatList(Activity mActivity, ArrayList<UserResult> mUserList) {
this.mActivity = mActivity;
this.userList = mUserList;
}
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mActivity,ProfileActivity.class);
startActivity(intent);
//Pass context object as your current activity
}
});
mUserAdapter = new UserAdapter (getActivity(), userArrayList);
recyclerView.setAdapter(mUserAdapter );