ListView ന്റെ ഒരു advanced version ആണ് RecyclerView
ഈ model ഇത് nammude data യെ display ചെയ്യാൻ വേണ്ടി ഒരുപാട് components ഒരുമിച്ചു work ചെയ്യും .
മൊത്തത്തിൽ user interface നു വേണ്ടി നമ്മുടെ container എന്ന് പറഞ്ഞാൽ layout ൽ add ചെയ്യുന്ന RecyclerView ആണ്
നമ്മൾ നൽകുന്ന layout manager ഉപയോഗിച്ച് RecyclerView സ്വയം view fill ചെയ്യും .
LinearLayoutManager അല്ലെങ്കിൽ GridLayoutManager), അല്ലെങ്കിൽ നമ്മുടെ തന്നെ layout manager ഓ namukk ഉപയോഗിക്കാം
list ൽ ഉള്ള views അവതരിപ്പിക്കുന്നത് view holder object ആണ്
ഓരോ view holder ഉം ഓരോ item തിനെ charge ചെയ്തു display ചെയ്യും
View holder object നെ manage ചെയ്യുന്നത് ഒരു adpter ആയിരിക്കും അതായത് നമ്മൾ extends ചെയ്യുന്ന RecyclerView.Adapter
ആവധ്യമുള്ള view holder ഇനി create ചെയ്യുന്നത് adpter class ആയിരിക്കും
view holder ന്റെ data യെ bind ചെയ്യുന്നതും adapter class ആയിരിക്കും
onBindViewHolder() method ഉപയോഗിച്ച് view holder ഇന് oru position assign ചെയ്തു കൊണ്ടാണ് ഇത് ചെയ്യുന്നത് .
RecyclerView model ഒരുപാട് കാര്യങ്ങൾ ചെയ്യുന്നുണ്ട് ,അതിനാൽ നമുക്ക് ഒരുപാട് work load കുറക്കാം
* നമ്മുക്ക് 10 item ഉണ്ടെങ്കിൽ ,list first populate ചെയ്യുമ്പോൾ list ന്റെ രണ്ടു side യിലും view holder കൽ create ചെയ്യുകയും bind ചെയ്യുകയും ചെയ്യും . ,അതായത് 0-9 വരെ ഇങ്ങനെ first ചെയ്യുമ്പോൾ പത്താമത്തെ item നെയും create ചെയ്യുകയും bind ചെയ്യുകയും ചെയ്യും ,അതായതു പിന്നെ user scroll ചെയ്യുമ്പോൾ അത് display ചെയ്യാൻ ready ആയിരിക്കുമെന്ന് .
*user scroll സിഹ്യ്യുമ്പോൾ പുതിയ view holder create ചെയ്യുകയും bind ചെയ്യുകയും ചെയ്യും , കൂടാതെ വീണ്ടും പുറകിലോട്ടു ചെല്ലുമ്പോൾ വീണ്ടും തിരിച്ചു കൊണ്ട് വരുവാൻ screen ഇന് പുറത്തുള്ള items ഇനി save ചെയ്യുകയും ചെയ്യും
*display ചെയ്തിരിക്കുന്ന item മാറുമ്പോൾ adpter ക്ലാസ്സിനെ വിളിച്ചു കൊണ്ട് ആ change RecyclerView.Adapter.notify…() ഉപയോഗിച്ച് affect ചെയ്താ ഭാഗം മാത്രം adapter class code rebuild ചെയ്യുകയും bind ചെയ്യുകയും ചെയ്യും
build.gradle file open ചെയ്തു support library add ചെയ്യാം
dependencies {
implementation 'com.android.support:recyclerview-v7:27.1.1'
}
ഇനി നമ്മുടെ mainactivity xml file ൽ Recylerview add ചെയ്യാം
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
ഇനി mainactivity class ൽ ചെല്ലാം
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
ഇതിൽ oncreate budle method ൽ
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
// content നു അനുസരിച്ചു RecyclerView ന്റെ layout size മാറാതിരിക്കാൻ
mRecyclerView.setHasFixedSize(true);
// linear layout manager ഉപയോഗിച്ച്
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
// adapter class specify ചെയ്യാം അതായതു MyAdapter
mAdapter = new MyAdapter(myDataset);
mRecyclerView.setAdapter(mAdapter);
ഇനി adapter class ഉപയോഗിക്കാം
നമ്മൾ create ചെയ്താ MyAdapter നെ RecyclerView.Adapter അതായതു RecyclerView ന്റെ Adapter ഉപയോഗിച്ച് extends ചെയ്യാം .
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>
ഒരു mDataset string array define
private String[] mDataset;
ചെയ്യാം അതിൽ കുറച്ചു data കൊടുക്കാം
ഇതിൽ ഒരു ViewHolder class ഉണ്ടാക്കി RecyclerView ന്റെ ViewHolder വെച്ച് extends ചെയ്യാം
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private String[] mDataset;
//view holder ഇലെ data item ത്തിനു വേണ്ടി എല്ലാ access ഉം views നു നൽകാം
public static class ViewHolder extends RecyclerView.ViewHolder {
// ഓരോ data item വും ഇതിൽ verum ഒരു string ആണ്
public TextView mTextView;
public ViewHolder(TextView v) {
super(v);
mTextView = v;
}
}
// ഒരു suitable constructor ഉണ്ടാക്കാം ( dataset ഇന് അനുസരിച്ചു )
public MyAdapter(String[] myDataset) {
mDataset = myDataset;
}
// പുതിയ views ഉണ്ടാക്കാം ( layout manager വിളിച്ചാൽ )
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// പുതിയ views ഉണ്ടാക്കാം
TextView v = (TextView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_text_view, parent, false);
...
ViewHolder vh = new ViewHolder(v);
return vh;
}
// view സിലെ content replace ചെയ്യാം ( layout manager വിളിച്ചാൽ )
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// ഈ position നിൽ dataset ൽ നിന്ന് element എടുക്കാം
// ഈ element ഉപയോഗിച്ച് view content replace ചെയ്യാം
holder.mTextView.setText(mDataset[position]);
}
// dataset ന്റെ size Return ചെയ്യാം ( layout manager വിളിച്ചാൽ )
@Override
public int getItemCount() {
return mDataset.length;
}
}
ഈ model ഇത് nammude data യെ display ചെയ്യാൻ വേണ്ടി ഒരുപാട് components ഒരുമിച്ചു work ചെയ്യും .
മൊത്തത്തിൽ user interface നു വേണ്ടി നമ്മുടെ container എന്ന് പറഞ്ഞാൽ layout ൽ add ചെയ്യുന്ന RecyclerView ആണ്
നമ്മൾ നൽകുന്ന layout manager ഉപയോഗിച്ച് RecyclerView സ്വയം view fill ചെയ്യും .
LinearLayoutManager അല്ലെങ്കിൽ GridLayoutManager), അല്ലെങ്കിൽ നമ്മുടെ തന്നെ layout manager ഓ namukk ഉപയോഗിക്കാം
list ൽ ഉള്ള views അവതരിപ്പിക്കുന്നത് view holder object ആണ്
ഓരോ view holder ഉം ഓരോ item തിനെ charge ചെയ്തു display ചെയ്യും
View holder object നെ manage ചെയ്യുന്നത് ഒരു adpter ആയിരിക്കും അതായത് നമ്മൾ extends ചെയ്യുന്ന RecyclerView.Adapter
ആവധ്യമുള്ള view holder ഇനി create ചെയ്യുന്നത് adpter class ആയിരിക്കും
view holder ന്റെ data യെ bind ചെയ്യുന്നതും adapter class ആയിരിക്കും
onBindViewHolder() method ഉപയോഗിച്ച് view holder ഇന് oru position assign ചെയ്തു കൊണ്ടാണ് ഇത് ചെയ്യുന്നത് .
RecyclerView model ഒരുപാട് കാര്യങ്ങൾ ചെയ്യുന്നുണ്ട് ,അതിനാൽ നമുക്ക് ഒരുപാട് work load കുറക്കാം
* നമ്മുക്ക് 10 item ഉണ്ടെങ്കിൽ ,list first populate ചെയ്യുമ്പോൾ list ന്റെ രണ്ടു side യിലും view holder കൽ create ചെയ്യുകയും bind ചെയ്യുകയും ചെയ്യും . ,അതായത് 0-9 വരെ ഇങ്ങനെ first ചെയ്യുമ്പോൾ പത്താമത്തെ item നെയും create ചെയ്യുകയും bind ചെയ്യുകയും ചെയ്യും ,അതായതു പിന്നെ user scroll ചെയ്യുമ്പോൾ അത് display ചെയ്യാൻ ready ആയിരിക്കുമെന്ന് .
*user scroll സിഹ്യ്യുമ്പോൾ പുതിയ view holder create ചെയ്യുകയും bind ചെയ്യുകയും ചെയ്യും , കൂടാതെ വീണ്ടും പുറകിലോട്ടു ചെല്ലുമ്പോൾ വീണ്ടും തിരിച്ചു കൊണ്ട് വരുവാൻ screen ഇന് പുറത്തുള്ള items ഇനി save ചെയ്യുകയും ചെയ്യും
*display ചെയ്തിരിക്കുന്ന item മാറുമ്പോൾ adpter ക്ലാസ്സിനെ വിളിച്ചു കൊണ്ട് ആ change RecyclerView.Adapter.notify…() ഉപയോഗിച്ച് affect ചെയ്താ ഭാഗം മാത്രം adapter class code rebuild ചെയ്യുകയും bind ചെയ്യുകയും ചെയ്യും
build.gradle file open ചെയ്തു support library add ചെയ്യാം
dependencies {
implementation 'com.android.support:recyclerview-v7:27.1.1'
}
ഇനി നമ്മുടെ mainactivity xml file ൽ Recylerview add ചെയ്യാം
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
ഇനി mainactivity class ൽ ചെല്ലാം
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
ഇതിൽ oncreate budle method ൽ
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
// content നു അനുസരിച്ചു RecyclerView ന്റെ layout size മാറാതിരിക്കാൻ
mRecyclerView.setHasFixedSize(true);
// linear layout manager ഉപയോഗിച്ച്
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
// adapter class specify ചെയ്യാം അതായതു MyAdapter
mAdapter = new MyAdapter(myDataset);
mRecyclerView.setAdapter(mAdapter);
ഇനി adapter class ഉപയോഗിക്കാം
നമ്മൾ create ചെയ്താ MyAdapter നെ RecyclerView.Adapter അതായതു RecyclerView ന്റെ Adapter ഉപയോഗിച്ച് extends ചെയ്യാം .
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>
ഒരു mDataset string array define
private String[] mDataset;
ചെയ്യാം അതിൽ കുറച്ചു data കൊടുക്കാം
ഇതിൽ ഒരു ViewHolder class ഉണ്ടാക്കി RecyclerView ന്റെ ViewHolder വെച്ച് extends ചെയ്യാം
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private String[] mDataset;
//view holder ഇലെ data item ത്തിനു വേണ്ടി എല്ലാ access ഉം views നു നൽകാം
public static class ViewHolder extends RecyclerView.ViewHolder {
// ഓരോ data item വും ഇതിൽ verum ഒരു string ആണ്
public TextView mTextView;
public ViewHolder(TextView v) {
super(v);
mTextView = v;
}
}
// ഒരു suitable constructor ഉണ്ടാക്കാം ( dataset ഇന് അനുസരിച്ചു )
public MyAdapter(String[] myDataset) {
mDataset = myDataset;
}
// പുതിയ views ഉണ്ടാക്കാം ( layout manager വിളിച്ചാൽ )
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// പുതിയ views ഉണ്ടാക്കാം
TextView v = (TextView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_text_view, parent, false);
...
ViewHolder vh = new ViewHolder(v);
return vh;
}
// view സിലെ content replace ചെയ്യാം ( layout manager വിളിച്ചാൽ )
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// ഈ position നിൽ dataset ൽ നിന്ന് element എടുക്കാം
// ഈ element ഉപയോഗിച്ച് view content replace ചെയ്യാം
holder.mTextView.setText(mDataset[position]);
}
// dataset ന്റെ size Return ചെയ്യാം ( layout manager വിളിച്ചാൽ )
@Override
public int getItemCount() {
return mDataset.length;
}
}