Java 意图在recyclerview onclick中不起作用

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;

我创建了一个显示firebase用户列表的recyclerview,每当用户单击列表中的项目时,我想将用户发送到另一个活动,但每当我调用intent时,它总是说“CurrentActivity不是封闭标签”。 这是密码

  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 );