RecyclerView onItemClicked callback

I am implementing a navigation box with RecyclerView using this tutorial, but I do not want to apply the entire tutorial, I just want to handle the user's click. I implemented onClickListener inside the ViewHolder my MyAdapter class:

 public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{ int Holderid; ImageView imageView, profile; TextView textView, Name, email, drawerTitle; private ClickListener listener; // ViewHolder Constructor with View and viewType as a parameter public ViewHolder(View itemView, int ViewType, ClickListener listener) { super(itemView); if (ViewType == TYPE_HEADER){ itemView.setClickable(false); Name = (TextView) itemView.findViewById(R.id.user_name); email = (TextView) itemView.findViewById(R.id.user_email); profile = (ImageView) itemView.findViewById(R.id.circleView); Holderid = 0; } if(ViewType == TYPE_ITEM) { itemView.setClickable(true); textView = (TextView) itemView.findViewById(R.id.rowText); imageView = (ImageView) itemView.findViewById(R.id.rowIcon); Holderid = 1; // Handle item click and set the selection } if(ViewType == TYPE_SEPARATOR){ itemView.setClickable(false); drawerTitle = (TextView) itemView.findViewById(R.id.drawerTitle); Holderid = 2; } this.listener = listener; itemView.setOnClickListener(this); itemView.setOnLongClickListener(this); } int pos; @Override public void onClick(View v) { if (listener != null) { listener.onItemClicked(getPosition()); pos= getPosition(); Log.d("TAG", "Item clicked at position " + getPosition()); } } @Override public boolean onLongClick(View v) { if (listener != null) { return listener.onItemLongClicked(getPosition()); } return false; } public interface ClickListener { public void onItemClicked(int position); public boolean onItemLongClicked(int position); } } 

I cannot figure out how to apply the ClickListener object to the MyAdapter object:

  mAdapter = new MyAdapter(dataList, mSelectedPositions, ...?); 

so when a user clicks on one item, I can process the user by clicking on MainActivity .

I created the adapter in this way (as indicated in the tutorial):

Entire MyAdapter class: http://pastie.org/private/cibcsj3zieorlkcgh2rm1g

and this is my MainActivity ' onCreate :

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* Assigning the toolbar object ot the view and setting the the Action bar to our toolbar */ toolbar = (Toolbar) findViewById(R.id.tool_bar); setSupportActionBar(toolbar); // enable ActionBar app icon to behave as action to toggle nav drawer getSupportActionBar().setDisplayHomeAsUpEnabled(true); //pulsante drawer getSupportActionBar().setHomeButtonEnabled(true); //pulsante dietro //Initializing mTitle = mDrawerTitle = getTitle(); SharedPreferences usrData = getSharedPreferences( usr_loggedin, MODE_PRIVATE); AVATARresID = R.mipmap.aka; // Add Drawer Item to dataList dataList = new ArrayList<>(); dataList = prepareDatalist(dataList, NAME, EMAIL, AVATARresID); mRecyclerView = (RecyclerView) findViewById(R.id.RecyclerView); mRecyclerView.setHasFixedSize(true); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mAdapter = new MyAdapter(dataList, mSelectedPositions); //**ERROR HERE** mRecyclerView.setAdapter(mAdapter); mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); // Drawer Listener set to the Drawer toggle mDrawerLayout.setDrawerListener(mDrawerToggle); mDrawerToggle.syncState(); // Finally we set the drawer toggle sync State } 

How to pull the onClick result that is present in the MyAdapter class back to my MainActivity ,

  int pos; @Override public void onClick(View v) { if (listener != null) { listener.onItemClicked(getPosition()); pos= getPosition(); Log.d("TAG", "Item clicked at position " + getPosition()); } } 

so that I can handle actions depending on the position of the clicked item?

+5
source share
1 answer

The MyAdapter constructor MyAdapter accepts an object of the class that implements ClickListener . For example, you can use Activity / Fragment this interface and use this as parameter

 public class MainActivity extends Activity implements ViewHolder.ClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // .... mAdapter = new MyAdapter(dataList, mSelectedPositions, this); // .... } 
+1
source

All Articles