As we all know java is call by value, and here we are passing a LinkedList to Adapter class. like this
// this snippet is belongs to mainActivity
private final LinkedList<String> mWordList = new LinkedList<>();
createDataSet(); // Let's create a data set by calling this method
mRecyclerView = findViewById(R.id.recycler_view);
// lets create an adapter
mWordListAdapter = new WordListAdapter(this,mWordList);
mRecyclerView.setAdapter(mWordListAdapter); // connect the adapter to the view
mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); // pass a layout manager
And adapter class having it's own linkedList which get the data of linkedList just we passed from MainActivity.
// Adapter class
public class WordListAdapter extends RecyclerView.Adapter<WordListAdapter.WordViewHolder> {
private LinkedList<String> mwordList;
private LayoutInflater mInflater;
// get the data from mainActivity and the layout inflator
public WordListAdapter(Context context, LinkedList<String> wordList) {
mInflater = LayoutInflater.from(context);
mwordList = wordList;
}
// only showing up the needed snippets
}
And set an onclicklistner to modify list when click on an item like this
@Override
public void onClick(View v) {
// get the position of the item that was clicked
int mPosition = getLayoutPosition();
// use this position to get the affected item in the wordlist
String element = mwordList.get(mPosition);
// change the data in the wordList
mwordList.set(mPosition,"cicked!"+element);
// notify the adapter that the data has been chagned
// so recyclerVeiw can update it
mWordListAdapter.notifyDataSetChanged();
}
And there also a fab button in MainActivity to insert new data
binding.fab.setOnClickListener(new View.OnClickListener() {
@Override // adding new word to the lsit
public void onClick(View view) {
int wordListSize = mWordList.size() + 1;
mWordList.add("+"+"word"+wordListSize); // adding a new string element
mRecyclerView.getAdapter().notifyItemInserted(wordListSize); // notify dataset changed
mRecyclerView.smoothScrollToPosition(wordListSize); // scroll screen where we added new data
}
Now my question is that how this data is changing without passing the updated LinkedList to adapter class, as we are only passing the size of updated list inside notifyItemIntserted. I want to know the background process because it's working mean something is there which went above my head.