Thursday 10 January 2019

Get RecyclerViewAdapter onclick position in main activity

You can achieve this by creating an interface inside 
your adapter for an itemclicklistener and then you can
 set onItemClickListener from your MainActivity.

Somewhere inside your RecyclerViewAdapter you would
 need the following:



private onRecyclerViewItemClickListener mItemClickListener;


public void setOnItemClickListener(onRecyclerViewItemClickListener mItemClickListener) {

    this.mItemClickListener = mItemClickListener;
}


public interface onRecyclerViewItemClickListener {

    void onItemClickListener(View view, int position);
}


Then inside your ViewHolder (which I've added as an inner class inside my adapter),
 you would apply the listener to the components you'd like the user to click, like so:

 class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public ImageView imageview;

    RecyclerViewHolder(View view) {

        super(view);

        this.imageview = (ImageView) view

                .findViewById(R.id.image);

        imageview.setOnClickListener(this);
    }


    @Override

    public void onClick(View v) {

        if (mItemClickListener != null) {

            mItemClickListener.onItemClickListener(v, getAdapterPosition());
        }
    }
}

This example shows an onClickListener being applied to the image inside a ViewHolder.
To implement this code, you would setOnItemClickListener to your adapter 
inside MainActivity as shown above.


 recyclerView.setAdapter(adapter);// set adapter on recyclerview

            adapter.notifyDataSetChanged();// Notify the adapter

            adapter.setOnItemClickListener(new RecyclerViewAdapter.onRecyclerViewItemClickListener() {

    @Override

    public void onItemClickListener(View view, int position) {

        Switch (view.getId()) {

            case R.id.letter:
                //logic here
                break;

            case R.id.firstname:
                //logic here
                break;
        ....            

        }
    }
});

Wednesday 9 January 2019

How to use fragment method in Main Activity class


Create interface
public interface ListenFromActivity {    void doSomethingInFragment();}
In Activity class keep refrence of ListenFromActivity interface
public ListenFromActivity activityListener;   
Make public method to set listener
public void setActivityListener(ListenFromActivity activityListener) {        this.activityListener = activityListener;    }
Add some trigger point in activity class, here I have used user interaction
   @Override    public void onUserInteraction() {        super.onUserInteraction();
        if (null != activityListener) {            activityListener.doSomethingInFragment();        }    }

Now in Fragment class
make your fragment implement interface class
public class SomeFragment extends Fragment implements ListenFromActivity
Android studio will prompt you to implement method of interface in fragment
void doSomethingInFragment(){//Add your code here }
Final part part listener instance to activity like this in fragment onCreate method
((ListnerActivity) getActivity()).setActivityListener(SomeFragment.this);
DONE!!. now you can call fragment method from activity.