Hello friends
Today i am introduced how to make sectional recyclerview without use any external library
If you search in google sectional recyclerview then you find more sample with external lib but i am find better solution. So lets start and improve our programming performance....
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
ActvityMain.java
package com.samset.headerrecyclerviewsample;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.OrientationHelper;
import android.support.v7.widget.RecyclerView;
import com.samset.headerrecyclerviewsample.adapter.SectionalAdapter;
import com.samset.headerrecyclerviewsample.model.model.CountryState;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
super.onStart();
SectionalAdapter adapter = new SectionalAdapter(getData());
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, OrientationHelper.VERTICAL, false);
RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
mRecyclerView.setLayoutManager(linearLayoutManager);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.setAdapter(adapter);
}
public List<CountryState> getData() {
List<CountryState> list = new ArrayList<>();
list.add(new CountryState("India", null, CountryState.COUNTRY_TYPE));
list.add(new CountryState("Allahabad", "1", CountryState.CITY_TYPE));
list.add(new CountryState("Bharatpur", "2", CountryState.CITY_TYPE));
list.add(new CountryState("Patna", "3", CountryState.CITY_TYPE));
list.add(new CountryState("Mumbai", "4", CountryState.CITY_TYPE));
list.add(new CountryState("Jaipur", "5", CountryState.CITY_TYPE));
list.add(new CountryState("Pakistan", null, CountryState.COUNTRY_TYPE));
list.add(new CountryState("Karachi", "6", CountryState.CITY_TYPE));
list.add(new CountryState("Ishlamabad", "7", CountryState.CITY_TYPE));
list.add(new CountryState("Bluechistan", "8", CountryState.CITY_TYPE));
list.add(new CountryState("Sindhu", "9", CountryState.CITY_TYPE));
list.add(new CountryState("Russiya", null, CountryState.COUNTRY_TYPE));
list.add(new CountryState("Mascow", "10", CountryState.CITY_TYPE));
list.add(new CountryState("Abaza", "11", CountryState.CITY_TYPE));
list.add(new CountryState("Baley", "12", CountryState.CITY_TYPE));
list.add(new CountryState("Barysh", "13", CountryState.CITY_TYPE));
list.add(new CountryState("Bely", "14", CountryState.CITY_TYPE));
list.add(new CountryState("Bobrov", "15", CountryState.CITY_TYPE));
list.add(new CountryState("Dolinsk", "16", CountryState.CITY_TYPE));
return list;
}
}
SectionalAdapter.java
package com.samset.headerrecyclerviewsample.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.samset.headerrecyclerviewsample.R;
import com.samset.headerrecyclerviewsample.model.model.CountryState;
import java.util.List;
public class SectionalAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public final int CITY_TYPE = 0;
public final int COUNTRY_TYPE = 1;
private List<CountryState> mList;
public SectionalAdapter(List<CountryState> list) {
this.mList = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
switch (viewType) {
case COUNTRY_TYPE:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.section, parent, false);
return new CountryViewHolder(view);
case CITY_TYPE:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.section_child, parent, false);
return new CityViewHolder(view);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
CountryState object = mList.get(position);
if (object != null) {
switch (object.getType()) {
case COUNTRY_TYPE:
((CountryViewHolder) holder).tvCountryName.setText(object.getName());
break;
case CITY_TYPE:
((CityViewHolder) holder).tvCityName.setText(object.getName());
//((CityViewHolder) holder).id.setText(object.getDescription());
break;
}
}
}
@Override
public int getItemCount() {
if (mList == null)
return 0;
return mList.size();
}
@Override
public int getItemViewType(int position) {
if (mList != null) {
CountryState object = mList.get(position);
if (object != null) {
return object.getType();
}
}
return 0;
}
public static class CountryViewHolder extends RecyclerView.ViewHolder {
private TextView tvCountryName;
public CountryViewHolder(View itemView) {
super(itemView);
tvCountryName = (TextView) itemView.findViewById(R.id.titleTextView);
}
}
public static class CityViewHolder extends RecyclerView.ViewHolder {
private TextView tvCityName;
private TextView id;
public CityViewHolder(View itemView) {
super(itemView);
tvCityName = (TextView) itemView.findViewById(R.id.titleTextView);
}
}
}
section.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:layout_margin="5dp"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#d7666666" />
<TextView
android:id="@+id/titleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:text="Section"
android:textSize="22sp"
android:textStyle="bold" />
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#d7666666" />
</LinearLayout>
Today i am introduced how to make sectional recyclerview without use any external library
If you search in google sectional recyclerview then you find more sample with external lib but i am find better solution. So lets start and improve our programming performance....
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
package com.samset.headerrecyclerviewsample;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.OrientationHelper;
import android.support.v7.widget.RecyclerView;
import com.samset.headerrecyclerviewsample.adapter.SectionalAdapter;
import com.samset.headerrecyclerviewsample.model.model.CountryState;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
super.onStart();
SectionalAdapter adapter = new SectionalAdapter(getData());
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, OrientationHelper.VERTICAL, false);
RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
mRecyclerView.setLayoutManager(linearLayoutManager);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.setAdapter(adapter);
}
public List<CountryState> getData() {
List<CountryState> list = new ArrayList<>();
list.add(new CountryState("India", null, CountryState.COUNTRY_TYPE));
list.add(new CountryState("Allahabad", "1", CountryState.CITY_TYPE));
list.add(new CountryState("Bharatpur", "2", CountryState.CITY_TYPE));
list.add(new CountryState("Patna", "3", CountryState.CITY_TYPE));
list.add(new CountryState("Mumbai", "4", CountryState.CITY_TYPE));
list.add(new CountryState("Jaipur", "5", CountryState.CITY_TYPE));
list.add(new CountryState("Pakistan", null, CountryState.COUNTRY_TYPE));
list.add(new CountryState("Karachi", "6", CountryState.CITY_TYPE));
list.add(new CountryState("Ishlamabad", "7", CountryState.CITY_TYPE));
list.add(new CountryState("Bluechistan", "8", CountryState.CITY_TYPE));
list.add(new CountryState("Sindhu", "9", CountryState.CITY_TYPE));
list.add(new CountryState("Russiya", null, CountryState.COUNTRY_TYPE));
list.add(new CountryState("Mascow", "10", CountryState.CITY_TYPE));
list.add(new CountryState("Abaza", "11", CountryState.CITY_TYPE));
list.add(new CountryState("Baley", "12", CountryState.CITY_TYPE));
list.add(new CountryState("Barysh", "13", CountryState.CITY_TYPE));
list.add(new CountryState("Bely", "14", CountryState.CITY_TYPE));
list.add(new CountryState("Bobrov", "15", CountryState.CITY_TYPE));
list.add(new CountryState("Dolinsk", "16", CountryState.CITY_TYPE));
return list;
}
}
package com.samset.headerrecyclerviewsample.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.samset.headerrecyclerviewsample.R;
import com.samset.headerrecyclerviewsample.model.model.CountryState;
import java.util.List;
public class SectionalAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public final int CITY_TYPE = 0;
public final int COUNTRY_TYPE = 1;
private List<CountryState> mList;
public SectionalAdapter(List<CountryState> list) {
this.mList = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
switch (viewType) {
case COUNTRY_TYPE:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.section, parent, false);
return new CountryViewHolder(view);
case CITY_TYPE:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.section_child, parent, false);
return new CityViewHolder(view);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
CountryState object = mList.get(position);
if (object != null) {
switch (object.getType()) {
case COUNTRY_TYPE:
((CountryViewHolder) holder).tvCountryName.setText(object.getName());
break;
case CITY_TYPE:
((CityViewHolder) holder).tvCityName.setText(object.getName());
//((CityViewHolder) holder).id.setText(object.getDescription());
break;
}
}
}
@Override
public int getItemCount() {
if (mList == null)
return 0;
return mList.size();
}
@Override
public int getItemViewType(int position) {
if (mList != null) {
CountryState object = mList.get(position);
if (object != null) {
return object.getType();
}
}
return 0;
}
public static class CountryViewHolder extends RecyclerView.ViewHolder {
private TextView tvCountryName;
public CountryViewHolder(View itemView) {
super(itemView);
tvCountryName = (TextView) itemView.findViewById(R.id.titleTextView);
}
}
public static class CityViewHolder extends RecyclerView.ViewHolder {
private TextView tvCityName;
private TextView id;
public CityViewHolder(View itemView) {
super(itemView);
tvCityName = (TextView) itemView.findViewById(R.id.titleTextView);
}
}
}
section.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:layout_margin="5dp"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#d7666666" />
<TextView
android:id="@+id/titleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:text="Section"
android:textSize="22sp"
android:textStyle="bold" />
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#d7666666" />
</LinearLayout>
Full SourceCodeDownload
Live Sample
No comments:
Post a Comment