In this post, we will see how to implement custom listview in MVC pattern.
Steps to create custom listview using mvc pattern.
Step 1: Create a listview in your 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" >
<ListView
android:id="@+id/lv_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:dividerHeight="1dp" >
</ListView>
</LinearLayout>
Step 2: Create data_list_item.xml and add it in layout folder.
<?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="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_data"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
Step 3: Create a init adapter method in your fragment or in activity.
public void initAdapter(List<User> users) {
lvData = (ListView) rootView.findViewById(R.id.lv_data);
DataListAdapter adapter = new DataListAdapter(users,getActivity());
lvData.setAdapter(adapter);
}
I have used fragment here.Step 4: create an Adapter , here we will create a DataListAdapter.java
public class DataListAdapter extends BaseAdapter {
private List<User> users;
private UserHolder holder;
private Activity mActivity ;
public DataListAdapter(List<User> users,Activity activity) {
this.users = users;
this.mActivity = activity;
}
@Override
public int getCount() {
return users.size();
}
@Override
public Object getItem(int position) {
return users.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView != null) {
holder = (UserHolder) convertView.getTag();
}else {
holder = new UserHolder(mActivity);
convertView = holder.getConvertView();
convertView.setTag(holder);
}
holder.initializeData(users.get(position));
holder.applyData();
return convertView;
}
}
Step 5: Create a Viewholder , Here we will create UserHolder.java
public class UserHolder extends BaseViewHolder {
private TextView tvData;
private User userItem;
public UserHolder(Activity activity) {
super(activity);
}
@Override
public View getConvertView() {
mView = mLayoutInflater.inflate(R.layout.data_list_item, null);
tvData = (TextView) mView.findViewById(R.id.tv_data);
return mView;
}
@Override
public void applyData() {
tvData.setText(userItem.getFirstname());
}
@Override
public void initializeData(Object data) {
userItem = (User) data;
}
}
Using above five steps we can create 3 different classes to follow MVC pattern.
ViewHolder inflate data_list_item.xml as list item As View
Adapter acts as a Controller.
MainActivity acts as a Model.
Happy coding !!!
No comments:
Post a Comment