Об открытии нового действия в ответ на щелчок по элементу RecyclerView, который находится внутри фрагмента

#android #android-fragments #android-activity #android-recyclerview #activity-lifecycle

Вопрос:

Я загружаю некоторые данные в базу RecyclerView данных Firebase в реальном времени. Это RecyclerView фрагмент, и я хочу открыть новое действие при нажатии на элемент. Но когда я добавляю элемент onClickListener в элемент из адаптера, мой щелчок даже не распознается приложением. Я не уверен, что я здесь делаю неправильно, потому что этот метод отлично работал для a 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);

        }
    });