RecyclerView Adding elements dynamically

Output:

Files need to bee in New Project:

MainActivity

RAdapter

RModel

activity_main.xml

inflator_layout.xml

build-gradle(app)

implementation 'com.jakewharton:butterknife:8.8.1'

annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

implementation 'com.android.support:recyclerview-v7:27.1.1'

public class MainActivity extends AppCompatActivity {

@BindView(R.id.my_recycler_view)

RecyclerView mRecyclerView;

private List<RModel> mList;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ButterKnife.bind(this);

mList = new ArrayList<>();

create100Rows();

RAdapter rAdapter = new RAdapter(this, mList, new RAdapter.OnItemClickListener() {

@Override

public void onItemClick(int position) {

//nothing todoo here when click on button

}

});

RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);

mRecyclerView.setLayoutManager(layoutManager);

mRecyclerView.setItemAnimator(new DefaultItemAnimator());

mRecyclerView.setAdapter(rAdapter);

}

/**

* When click on 'Add button' this method will be called.

* @param view Particular View

*/

public void addOneRow(View view) {

addRow();

refreshRV();

}

/**

* Adding row to existing list at end.

*/

private void addRow() {

String name = String.valueOf(getSizeOfList());

RModel rModel = new RModel();

rModel.setName(name);

mList.add(rModel);

}

/**

* Creating 100 rows dynamically

*/

private void create100Rows() {

for (int i = 0; i < 500; i++) {

RModel rModel = new RModel();

rModel.setName("Row no " + i);

mList.add(rModel);

}

}

/**

* Refreshing RecyclerView and scroll up dynamically

*/

private void refreshRV() {

mRecyclerView.getAdapter().notifyItemInserted(getSizeOfList());

mRecyclerView.smoothScrollToPosition(getSizeOfList());

}

/**

* Get total size of list

* @return Total size of list

*/

private int getSizeOfList() {

return mList.size();

}

}

public class RAdapter extends

RecyclerView.Adapter<RAdapter.ViewHolder> {

private static final String TAG = RAdapter.class.getSimpleName();

private Context context;

private List<RModel> list;

private OnItemClickListener onItemClickListener;

public RAdapter(Context context, List<RModel> list,

OnItemClickListener onItemClickListener) {

this.context = context;

this.list = list;

this.onItemClickListener = onItemClickListener;

}

public static class ViewHolder extends RecyclerView.ViewHolder {

// Todo Butterknife bindings

@BindView(R.id.text)

TextView mTV;

public ViewHolder(View itemView) {

super(itemView);

ButterKnife.bind(this, itemView);

}

public void bind(final RModel model,

final OnItemClickListener listener) {

if(model.getName() != null) mTV.setText(model.getName());

itemView.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

listener.onItemClick(getLayoutPosition());

}

});

}

}

@Override

public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

Context context = parent.getContext();

LayoutInflater inflater = LayoutInflater.from(context);

View view = inflater.inflate(R.layout.inflator_layout, parent, false);

ButterKnife.bind(this, view);

ViewHolder viewHolder = new ViewHolder(view);

return viewHolder;

}

@Override

public void onBindViewHolder(ViewHolder holder, int position) {

RModel item = list.get(position);

//Todo: Setup viewholder for item

holder.bind(item, onItemClickListener);

}

@Override

public int getItemCount() {

return list.size();

}

public interface OnItemClickListener {

void onItemClick(int position);

}

}

public class RModel {

String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

xmlns:android="http://schemas.android.com/apk/res/android">

<android.support.v7.widget.RecyclerView

android:id="@+id/my_recycler_view"

android:scrollbars="vertical"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="8"/>

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="add one row"

android:onClick="addOneRow"/>

</LinearLayout>

inflator_layout.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical">

<TextView

android:id="@+id/text"

android:layout_width="match_parent"

android:layout_height="match_parent" />

</LinearLayout>