There is a method in MainActivity :

 public void getPositionEdit(int position) { Intent intent = new Intent(this, addNote.class); intent.putExtra("position", position); intent.putStringArrayListExtra("notes", array); startActivityForResult(intent, 1); } 

There is an adapter in which clicks on RecyclerView components are RecyclerView :

 public void onBindViewHolder(final ViewHolder holder, final int position) { holder.mTextView.setText(array.get(position)); holder.mTextView.setOnClickListener (new View.OnClickListener() { @Override public void onClick(View v) MainActivity ma = new MainActivity(); ma.getPositionEdit(position); } }); } 

After clicking on a component, its position should be read out and transferred to the MainActivity method, in which it will launch a new Activity . How to properly prescribe to work correctly.

    3 answers 3

    best to add a listener

    like that:

     Activity implements ItemClickListener { ///// adapterRececlerView.setClickListener(this); /////// @Override public void onItemClick(View view, int position) { Intent intent = new Intent(this, addNote.class); intent.putExtra("position", position); intent.putStringArrayListExtra("notes", array); startActivityForResult(intent, 1); } } 

    Part of the adapter code:

     public class AdapterImageRV extends RecyclerView.Adapter<AdapterImageRV.ViewHolder> { private ItemClickListener mClickListener; public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public ViewHolder(View itemView) { super(itemView); itemView.setOnClickListener(this); } @Override public void onClick(View view) { if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition()); } } /////////////// public void setClickListener(ItemClickListener itemClickListener) { this.mClickListener = itemClickListener; } // parent activity will implement this method to respond to click events public interface ItemClickListener { void onItemClick(View view, int position); }} 

      Declare interface:

       public interface OnRecyclerViewItemClickListener { void onItemClicked(int position); } 

      Implement this interface in activit:

       public class SomeActivity extends AppCompatActivity implements OnRecyclerViewItemClickListener { // ... @Override public void onItemClicked(int position){ // some actions } } 

      Add a field and setter to the adapter:

       public class SomeAdapter extends RecyclerView.Adapter<SomeViewHolder> { private OnRecyclerViewItemClickListener mOnRecyclerViewItemClickListener; // ... public void setListener(OnRecyclerViewItemClickListener onRecyclerViewItemClickListener) { mOnRecyclerViewItemClickListener = onRecyclerViewItemClickListener; } } 

      When creating an adapter, install the leaflet:

       SomeAdapter someAdapter = new SomeAdapter(); someAdapter.setListener(this); 

      And then from the adapter, call the onItemClicked(...) method:

       if (mOnRecyclerViewItemClickListener != null) { mOnRecyclerViewItemClickListener.onItemClicked(position); } 

      Ps. I wrote on my knee, but the point, I think, is clear.

        You have created a new activation object, it is placed in a new cell in memory, but, at the same time, because life cycle methods were not called, it is all completely non-working.

        You need to get an active copy of the active. For example, casting context to it.

         MainActivity ma = (MainActivity) v.getContext(); ma.getPositionEdit(position); 

        And even better is to implement an interactive interface in activation, throw it into the adapter and at the right moment pull its method.