Invoke interface method in Adapter Class for callback method using Fragments

Basically,this is a notes app using fragments so that we get apt view of app on changing orientation

MainActivity.java

import android.app.Fragment;
import android.app.FragmentManager;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements FragmentTitle.Communicator{
FragmentManager fragmentManager=getFragmentManager();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    FragmentTitle fragmentTitle= (FragmentTitle) fragmentManager.findFragmentById(R.id.fragtitle);
    fragmentTitle.setCommunicator(this);
}

@Override
public void respond(String data) {
    FragmentDescription fragmentDescription= (FragmentDescription) fragmentManager.findFragmentById(R.id.fragdescription);
    if(fragmentDescription!=null & fragmentDescription.isVisible()){
        fragmentDescription.displaydata(data);
        //landscape orientation
    }else{
        // potrait orientation
        Intent intent=new Intent(MainActivity.this,AnotherActivity.class);
        intent.putExtra("description",data);
        startActivity(intent);
    }
}
}

FragmentTitle.java

import android.app.Fragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View; 
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;

import java.util.ArrayList;

public class FragmentTitle extends Fragment {
RecyclerView recyclerView;
ArrayList<Notes> arrayList;
NotesAdapter notesAdapter;
Communicator communicator;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    final View inflatedView=inflater.inflate(R.layout.title_list,null,false);
    recyclerView=inflatedView.findViewById(R.id.rv);
    arrayList=new ArrayList<Notes>();
    notesAdapter=new NotesAdapter(inflatedView.getContext(),arrayList,communicator);
    recyclerView.setAdapter(notesAdapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(inflatedView.getContext(),LinearLayoutManager.VERTICAL,false));

    final View dialogView= LayoutInflater.from(inflatedView.getContext()).inflate(R.layout.dialog_layout,null,false);

    final EditText title=dialogView.findViewById(R.id.t);
    final EditText description=dialogView.findViewById(R.id.d);
    final AlertDialog alertDialog=new AlertDialog.Builder(inflatedView.getContext())
            .setTitle("Enter the details:")
            .setCancelable(false)
            .setView(dialogView)
            .setPositiveButton("add", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Notes notes=new Notes(title.getText().toString(),description.getText().toString(),false);
                    ArrayList<Notes>arr=notesAdapter.getArrayList();
                    arr.add(notes);
                    notesAdapter.setArrayList(arr);
                    notesAdapter.notifyDataSetChanged();

                }
            })
            .setNegativeButton("no", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    dialogInterface.dismiss();
                }
            }).create();

    FloatingActionButton fab = (FloatingActionButton) inflatedView.findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            alertDialog.show();
        }
    });

    return inflatedView;
}
public void setCommunicator(Communicator communicator){
    this.communicator=communicator;
}
//Interface is created inside this Fragment class because we want to hide its visibility from other fragment class (just trying to implement a better design pattern) 
public interface Communicator{
    public void respond(String description);
}
}

NotesAdapter.java

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;

public class NotesAdapter extends 
RecyclerView.Adapter<NotesAdapter.NotesHolder>{
ArrayList<Notes> arrayList;
Context c;
FragmentTitle.Communicator communicator;
NotesAdapter(Context context, ArrayList<Notes> list, 
FragmentTitle.Communicator communicator){
    this.arrayList=list;
    this.c=context;
    this.communicator=communicator;
}

public ArrayList<Notes> getArrayList() {
    return arrayList;
}

public void setArrayList(ArrayList<Notes> arrayList) {
    this.arrayList = arrayList;
}
public class NotesHolder extends RecyclerView.ViewHolder {
    TextView textView;
    public NotesHolder(View itemView) {
        super(itemView);
        textView=itemView.findViewById(R.id.tv);
    }
}

@Override
public NotesAdapter.NotesHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    return new NotesHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row,parent,false));
}

@Override
public void onBindViewHolder(final NotesAdapter.NotesHolder holder, int position) {
    final Notes currentNote=arrayList.get(position);
    holder.textView.setText(currentNote.getTitle());
    holder.textView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {
            arrayList.remove(holder.getAdapterPosition());
            notifyItemRemoved(holder.getAdapterPosition());
            return true;
        }
    });
    holder.textView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            communicator.respond(currentNote.getDescription());
           //The app crashes when textview which is basically the title of each Note is clicked,the error is java.lang.NullPointerException: Attempt to invoke interface method
          //Basically my query is what is the right method if I want to invoke interface method(declared in FragmentTitle)which is void respond(String data) on click of textview in Adapterclass because we respond on click of textview i.e we check the orientation of app and display description of each title accordingly i.e depending whether the title was clicked in landscape mode or potrait mode
        }
    });
}

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

FragmentDescrption

import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;


public class FragmentDescription extends Fragment {
TextView textView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    View inflatedView=inflater.inflate(R.layout.description_view,null,false);
    textView=inflatedView.findViewById(R.id.tv);
    return inflatedView;
}
public void displaydata(String data){
    textView.setText(data);//fetching data from MainActivity.java
}
}

AnotherActivity.java (this is activity opened which contains our description ,used in potrait mode)

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;


public class AnotherActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.another_activity);
    Intent intent=getIntent();
    textView=findViewById(R.id.tv);
    textView.setText(intent.getStringExtra("description"));
}
}

I made the right layout for each activity , fragment and dialog box so dont bother about them at the moment ,the crux of my query is that ,what is the right way if I want to invoke interface method(declared in FragmentTitle)which is void respond(String data) on click of textview in Adapterclass because we respond on click of textview i.e we check the orientation of app and display description of each title accordingly i.e depending whether the title was clicked in landscape mode or potrait mode

Please suggest if there is some better way to invoke method of interface on click of textview declared in NoteAdapter inside BindView method.Thank you in advance

Also tell how to use saveInstanceState for saving and restoring the previous state on changing orientation.