Search code examples
androidfirebaseandroid-recyclerviewadapterandroid-viewholder

how to add a onclicklistner in a view holder


I want add a onclicklistner in my viewholder and I don't know how to add it inside the view holder,when the user click the item it should pass the value

I want to fix a onclicklisner inside usersviewholder ,i don't know how so i need some experts help. my code is given below

 button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String searchText = editText1.getText().toString();
                firebaseUserSearch(searchText);
            }
        });
    }
    private void firebaseUserSearch(String searchText) {
        // Query firebaseSearchQuery = reference.orderByChild("title").startAt("\uf8ff" + searchText).endAt(searchText + "\uf8ff");
        String searchedText = searchText.trim();
        Query firebaseSearchQuery = reference.orderByChild("title").startAt(searchedText ).endAt(searchedText + "\uf8ff");
        FirebaseRecyclerOptions<Profile> options =
                new FirebaseRecyclerOptions.Builder<Profile>()
                        .setQuery(firebaseSearchQuery, Profile.class)
                        .setLifecycleOwner(this)
                        .build();





        FirebaseRecyclerAdapter firebaseRecyclerAdapter= new FirebaseRecyclerAdapter<Profile, MainActivity.UsersViewHolder>(options) {
            @NonNull
            @Override
            public MainActivity.UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                return new MainActivity.UsersViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item, parent,false));
            }

            @Override
            protected void onBindViewHolder(@NonNull MainActivity.UsersViewHolder holder, int position, @NonNull Profile model) {
                holder.setDetails(getApplicationContext(), model.getCon(), model.getTitle(), model.getDesc(), model.getImage());
            }
        };recyclerView.setAdapter(firebaseRecyclerAdapter);


    }
    public static class UsersViewHolder extends RecyclerView.ViewHolder{
        View mView;
        TextView title, desc;
        ImageView image;
        public UsersViewHolder(View itemView) {
            super(itemView);

            mView = itemView;
        }
        public void setDetails(Context ctx, String userName, String userStatus, String userImage){
            title = (TextView) mView.findViewById(R.id.title);
            desc = (TextView) mView.findViewById(R.id.desc);
            image = (ImageView) mView.findViewById(R.id.image);
            title.setText(userName);
            desc.setText(userStatus);

            Glide.with(ctx).load(userImage).into(image);
        }


    }

i want a intent in the onclick like


            Uri webpage = Uri.parse(profiles.get(getAdapterPosition()).getDesc());
            Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
            PackageManager packageManager = context.getPackageManager();
            List<ResolveInfo> activities = packageManager.queryIntentActivities(webIntent, 0);
            boolean isIntentSafe = activities.size() > 0;
            if (isIntentSafe) {
                context.startActivity(webIntent);
            }
            else
            {
                context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/search?q=google&hl=en")));

            }
        }

Solution

  • You have to implements View.OnClickListener and setOnClickListener in per item that you want to click on it:

    public static class UsersViewHolder extends RecyclerView.ViewHolder implements
     View.OnClickListener{
    
            View mView;
            TextView title, desc;
            ImageView image;
            public UsersViewHolder(View itemView) {
                super(itemView);
    
                mView = itemView;
            }
            public void setDetails(Context ctx, String userName, String userStatus, String userImage){
                title = (TextView) mView.findViewById(R.id.title);
                desc = (TextView) mView.findViewById(R.id.desc);
                image = (ImageView) mView.findViewById(R.id.image);
                title.setText(userName);
                desc.setText(userStatus);
    
                Glide.with(ctx).load(userImage).into(image);
    
                mView.setOnClickListener(this);
    
            }
    
         @Override
            public void onClick(View v) {
    
           //you can pass data to everywhere with callback here
            }
    
    }