关于打开一个新活动以响应对片段内的 RecyclerView 项目的点击

Posted

技术标签:

【中文标题】关于打开一个新活动以响应对片段内的 RecyclerView 项目的点击【英文标题】:About opening a new activity in respond to a click on a RecyclerView item which is inside of a fragment 【发布时间】:2021-10-10 11:37:43 【问题描述】:

我正在将一些数据从 Firebase 实时数据库加载到 RecyclerView。这个RecyclerView 在一个片段中,我想在单击一个项目时打开一个新活动。但是,当我将 onClickListener 从适配器添加到项目时,应用程序甚至无法识别我的点击。我不确定我在这里做错了什么,因为当 RecyclerView 在正常活动中时,此方法可以正常工作。

这是我大学的一个项目,我应该明天提交。所以我真的需要一些帮助。

这是我的数据适配器类,


public class Adapter_NoLimit extends RecyclerView.Adapter<Adapter_NoLimit.LViewHolder> 

    Context context;
    ArrayList<Helper> list_nl;


    public Adapter_NoLimit(Context context, ArrayList<Helper> list_nl) 
        this.context = context;
        this.list_nl = list_nl;

    

    @NonNull
    @Override
    public Adapter_NoLimit.LViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) 

        View v = LayoutInflater.from(context).inflate(R.layout.itemlist, parent, false);
        return new LViewHolder(v);
    

    @Override
    public void onBindViewHolder(@NonNull Adapter_NoLimit.LViewHolder holder, int position) 

        //final Helper temp = list_nl.get(position);

        String fname_txt = list_nl.get(position).getFname();
        String catg_txt = list_nl.get(position).getSpin();
        String prof_img = list_nl.get(position).getProfile_url();

        holder.setUsers(fname_txt, catg_txt, prof_img);

        holder.f_name.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 

                AppCompatActivity activity = (AppCompatActivity) v.getContext();

                Intent i = new Intent(activity, UserProfile_VV.class);
                i.putExtra("full name", fname_txt);
                activity.startActivity(i);

            
        );
    

    @Override
    public int getItemCount() 
        return list_nl.size();
    



    public class LViewHolder extends RecyclerView.ViewHolder

        private TextView f_name, catG;
        private ImageView profile_pic;

        public LViewHolder(@NonNull View itemView) 
            super(itemView);

            f_name = itemView.findViewById(R.id.username_view);
            catG = itemView.findViewById(R.id.category_view);
            profile_pic = itemView.findViewById(R.id.userimage);


        

        public void setUsers(String fname_txt, String catg_txt, String prof_img) 
            f_name.setText(fname_txt);
            catG.setText(catg_txt);
            Picasso.get().load(prof_img).fit().into(profile_pic);
        


    


这是片段之一,


public class Beauty_Frag extends Fragment 


    RecyclerView recyclerView;
    DatabaseReference reference, user_ref;
    ArrayList<Helper> list;
    Adapter adapter;
    FirebaseAuth auth;
    String uid;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_beauty, container, false);

        recyclerView = v.findViewById(R.id.beauty_recycler_frag);
        reference = FirebaseDatabase.getInstance().getReference();
        user_ref = reference.child("users");

        auth = FirebaseAuth.getInstance();

        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

        //searchField = findViewById(R.id.search_field);

        list = new ArrayList<>();
        adapter = new Adapter(getContext(), list);
        recyclerView.setAdapter(adapter);

        user_ref.addValueEventListener(new ValueEventListener() 
            @Override
            public void onDataChange(@NonNull /*@org.jetbrains.annotations.NotNull*/ DataSnapshot snapshot) 
                for (DataSnapshot key : snapshot.getChildren()) 
                    if( key.child("spin").getValue().toString().equals("Beauty")) 

                        Helper helper = key.getValue(Helper.class);
                        list.add(helper);

                        adapter.notifyDataSetChanged();
                    

                
            

            @Override
            public void onCancelled(@NonNull /*@org.jetbrains.annotations.NotNull*/ DatabaseError error) 

            
        );

        return  v;
    


如果您有任何解决方案,非常欢迎您。

【问题讨论】:

【参考方案1】:

对 onClicklistner 使用以下代码:

holder.f_name.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 

       

            Intent i = new Intent(context, UserProfile_VV.class);
            i.putExtra("full name", fname_txt);
            context.startActivity(i);

        
    );

【讨论】:

以上是关于关于打开一个新活动以响应对片段内的 RecyclerView 项目的点击的主要内容,如果未能解决你的问题,请参考以下文章

如何从对话框片段中打开新活动

Kotlin:在片段内打开新活动

片段和活动之间没有传递值

我无法从 ListFragment 内的 onListItemClick 开始新活动

片段内的按钮

用活动组内的另一个片段替换片段