Search code examples
javaandroidonclicklistener

How to Implemet onClick listener insidie Recycleview to open different activities


I'm using Horizontal Recycleview to show the icon in my app. It cotains one Recycle view and one Mainactivity Class.

I'm trying to use the onClick listener method inside the adapter class but to my surprise it is not working yet all and also don't recognize intent and give cannot resolve intent symbol. so I used toast message instead but also app compile sucessfully but nothing happens.

Here is my Recycle view class

public class SnapRecyclerAdapter extends RecyclerView.Adapter<SnapRecyclerAdapter.ReyclerViewHolder> {

    private LayoutInflater layoutInflater;
    private Context context;
    private ArrayList<Item> items;

    public SnapRecyclerAdapter(Context context, ArrayList<Item> items) {
        this.layoutInflater = LayoutInflater.from(context);
        this.context = context;
        this.items = items;
    }

    @Override
    public ReyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View item = layoutInflater.inflate(R.layout.item_recycler_view, parent, false);

        return new ReyclerViewHolder(item);
    }

    @Override
    public void onBindViewHolder(final ReyclerViewHolder holder, int position) {
        Item item = items.get(position);

        holder.image.setImageResource(item.getDrawable());
        holder.appName.setText(item.getName());
    }


    @Override
    public int getItemCount() {
        return items.size();
    }

    class ReyclerViewHolder extends RecyclerView.ViewHolder {
        private ImageView image;
        private TextView appName;

        private ReyclerViewHolder(final View v) {
            super(v);

            image = (ImageView) v.findViewById(R.id.image);
            appName = (TextView) v.findViewById(R.id.app_name);
            context = v.getContext();
        }


        private View.OnClickListener Click=new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                switch(getAdapterPosition())
                {
                    case 1:
                        Toast.makeText(context, "No data available", Toast.LENGTH_SHORT).show();
                }
            }

        };
    }

}

and my Mainactivity class is

public class MainActivity extends AppCompatActivity {

    private ArrayList<Item> items;
    private RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

        createApps();

        SnapHelper snapHelper = new GravitySnapHelper(Gravity.BOTTOM);
        snapHelper.attachToRecyclerView(recyclerView);

        // HORIZONTAL for Gravity START/END and VERTICAL for TOP/BOTTOM
        recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
        recyclerView.setHasFixedSize(true);

        SnapRecyclerAdapter adapter = new SnapRecyclerAdapter(this, items);
        recyclerView.setAdapter(adapter);
    }

    private void createApps() {
        items = new ArrayList<>();
        items.add(new Item("Google+", R.drawable.google_plus));
        items.add(new Item("Facebook", R.drawable.facebook));
        items.add(new Item("LinkedIn", R.drawable.linkedin));
        items.add(new Item("Youtube", R.drawable.youtube));
        items.add(new Item("Instagram", R.drawable.instagram));
        items.add(new Item("Skype", R.drawable.skype));
        items.add(new Item("Twitter", R.drawable.twitter));
        items.add(new Item("Wikipedia", R.drawable.wikipedia));
        items.add(new Item("Whats app", R.drawable.what_apps));
        items.add(new Item("Pokemon Go", R.drawable.pokemon_go));
    }
}


Solution

  • You want the click listener on the whole itemView? Here is an example:

    //Implement View.OnClickListener
    class ReyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        private ImageView image;
        private TextView appName;
    
        private ReyclerViewHolder(final View v) {
            super(v);
    
            image = (ImageView) v.findViewById(R.id.image);
            appName = (TextView) v.findViewById(R.id.app_name);
    
            // Set the onClickListener
            v.setOnClickListener(this)
        }
    
        @Override
        public void onClick(View v) {
    
            // if (getAdapterPosition() != RecyclerView.NO_POSITION) {
                  Context context = v.getContext();
                  Intent intent = new Intent(context, aActivityClass.class);
                  intent.putExtra(extraKey, extraValue);
                  context.startActivity(intent)
            // }
        };
    }