Step: 1======
Create two Model Classes like below.
SingleItemModel.java1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | package com.pratap.gplaystore.models;
/** * Created by pratap.kesaboyina on 01-12-2015. */ public class SingleItemModel {
private String name; private String url; private String description;
public SingleItemModel() { }
public SingleItemModel(String name, String url) { this.name = name; this.url = url; }
public String getUrl() { return url; }
public void setUrl(String url) { this.url = url; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getDescription() { return description; }
public void setDescription(String description) { this.description = description; }
}
|
SectionDataModel.java1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package com.pratap.gplaystore.models;
import java.util.ArrayList;
/** * Created by pratap.kesaboyina on 30-11-2015. */ public class SectionDataModel {
private String headerTitle; private ArrayList<SingleItemModel> allItemsInSection;
public SectionDataModel() {
} public SectionDataModel(String headerTitle, ArrayList<SingleItemModel> allItemsInSection) { this.headerTitle = headerTitle; this.allItemsInSection = allItemsInSection; }
public String getHeaderTitle() { return headerTitle; }
public void setHeaderTitle(String headerTitle) { this.headerTitle = headerTitle; }
public ArrayList<SingleItemModel> getAllItemsInSection() { return allItemsInSection; }
public void setAllItemsInSection(ArrayList<SingleItemModel> allItemsInSection) { this.allItemsInSection = allItemsInSection; }
}
|
Step: 2======
Create an Activity with RecyclerView to show the list in vertical order.
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | package com.pratap.gplaystore;
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar;
import com.pratap.gplaystore.adapters.RecyclerViewDataAdapter; import com.pratap.gplaystore.models.SectionDataModel; import com.pratap.gplaystore.models.SingleItemModel;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private Toolbar toolbar;
ArrayList<SectionDataModel> allSampleData;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
allSampleData = new ArrayList<SectionDataModel>();
if (toolbar != null) { setSupportActionBar(toolbar); toolbar.setTitle("G PlayStore");
}
createDummyData();
RecyclerView my_recycler_view = (RecyclerView) findViewById(R.id.my_recycler_view);
my_recycler_view.setHasFixedSize(true);
RecyclerViewDataAdapter adapter = new RecyclerViewDataAdapter(this, allSampleData);
my_recycler_view.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
my_recycler_view.setAdapter(adapter);
}
public void createDummyData() { for (int i = 1; i <= 5; i++) {
SectionDataModel dm = new SectionDataModel();
dm.setHeaderTitle("Section " + i);
ArrayList<SingleItemModel> singleItem = new ArrayList<SingleItemModel>(); for (int j = 0; j <= 5; j++) { singleItem.add(new SingleItemModel("Item " + j, "URL " + j)); }
dm.setAllItemsInSection(singleItem);
allSampleData.add(dm);
} } }
|
Create an XML Layout for the above activity class
activity_main.xml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:elevation="8dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<android.support.v7.widget.RecyclerView android:id="@+id/my_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="none" />
</LinearLayout>
|
Step: 3======
Now Create an Adapter Class for the recyclerView in the MainActivity.
RecyclerViewDataAdapter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | package com.pratap.gplaystore.adapters;
/** * Created by pratap.kesaboyina on 24-12-2014. */ import android.content.Context; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import android.widget.Toast;
import com.pratap.gplaystore.R; import com.pratap.gplaystore.models.SectionDataModel;
import java.util.ArrayList;
public class RecyclerViewDataAdapter extends RecyclerView.Adapter<RecyclerViewDataAdapter.ItemRowHolder> {
private ArrayList<SectionDataModel> dataList; private Context mContext;
public RecyclerViewDataAdapter(Context context, ArrayList<SectionDataModel> dataList) { this.dataList = dataList; this.mContext = context; }
@Override public ItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, null); ItemRowHolder mh = new ItemRowHolder(v); return mh; }
@Override public void onBindViewHolder(ItemRowHolder itemRowHolder, int i) {
final String sectionName = dataList.get(i).getHeaderTitle();
ArrayList singleSectionItems = dataList.get(i).getAllItemsInSection();
itemRowHolder.itemTitle.setText(sectionName);
SectionListDataAdapter itemListDataAdapter = new SectionListDataAdapter(mContext, singleSectionItems);
itemRowHolder.recycler_view_list.setHasFixedSize(true); itemRowHolder.recycler_view_list.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)); itemRowHolder.recycler_view_list.setAdapter(itemListDataAdapter);
itemRowHolder.btnMore.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {
Toast.makeText(v.getContext(), "click event on more, "+sectionName , Toast.LENGTH_SHORT).show();
} });
/* Glide.with(mContext) .load(feedItem.getImageURL()) .diskCacheStrategy(DiskCacheStrategy.ALL) .centerCrop() .error(R.drawable.bg) .into(feedListRowHolder.thumbView);*/ }
@Override public int getItemCount() { return (null != dataList ? dataList.size() : 0); }
public class ItemRowHolder extends RecyclerView.ViewHolder {
protected TextView itemTitle;
protected RecyclerView recycler_view_list;
protected Button btnMore;
public ItemRowHolder(View view) { super(view);
this.itemTitle = (TextView) view.findViewById(R.id.itemTitle); this.recycler_view_list = (RecyclerView) view.findViewById(R.id.recycler_view_list); this.btnMore= (Button) view.findViewById(R.id.btnMore);
}
}
}
|
Now create an xml Layout file for the above adapter class.
list_item.xml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | <?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:background="?android:selectableItemBackground" android:orientation="vertical" android:padding="5dp">
<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="2dp">
<TextView android:id="@+id/itemTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_centerVertical="true" android:layout_gravity="center_vertical" android:layout_toLeftOf="@+id/btnMore" android:text="Sample title" android:textColor="@android:color/black" android:textSize="18sp" />
<Button android:id="@+id/btnMore" android:layout_width="wrap_content" android:layout_height="42dp" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:theme="@style/MyButton" android:text="more" android:textColor="#FFF" />
</RelativeLayout>
<android.support.v7.widget.RecyclerView android:id="@+id/recycler_view_list" android:layout_width="match_parent" android:layout_height="160dp" android:layout_gravity="center_vertical" android:orientation="horizontal" />
</LinearLayout>
|
Step: 4======
Now , In order to make a horizontal RecyclerView , we need create a layout and Adapter class for each row.
list_single_card.xml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" app:cardCornerRadius="5dp" app:cardUseCompatPadding="true" >
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="0dp" android:background="?android:selectableItemBackground" android:orientation="vertical">
<ImageView android:id="@+id/itemImage" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center_horizontal" android:scaleType="fitCenter" android:src="@drawable/android" />
<TextView android:id="@+id/tvTitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/itemImage" android:gravity="center" android:padding="5dp" android:text="Sample title" android:textColor="@android:color/black" android:textSize="18sp" />
</LinearLayout>
</android.support.v7.widget.CardView>
|
The Adapter Class for Horizontal RecyclerView
SectionListDataAdapter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | package com.pratap.gplaystore.adapters;
/** * Created by pratap.kesaboyina on 24-12-2014. */
import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast;
import com.pratap.gplaystore.R; import com.pratap.gplaystore.models.SingleItemModel;
import java.util.ArrayList;
public class SectionListDataAdapter extends RecyclerView.Adapter<SectionListDataAdapter.SingleItemRowHolder> {
private ArrayList<SingleItemModel> itemsList; private Context mContext;
public SectionListDataAdapter(Context context, ArrayList<SingleItemModel> itemsList) { this.itemsList = itemsList; this.mContext = context; }
@Override public SingleItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_single_card, null); SingleItemRowHolder mh = new SingleItemRowHolder(v); return mh; }
@Override public void onBindViewHolder(SingleItemRowHolder holder, int i) {
SingleItemModel singleItem = itemsList.get(i);
holder.tvTitle.setText(singleItem.getName());
/* Glide.with(mContext) .load(feedItem.getImageURL()) .diskCacheStrategy(DiskCacheStrategy.ALL) .centerCrop() .error(R.drawable.bg) .into(feedListRowHolder.thumbView);*/ }
@Override public int getItemCount() { return (null != itemsList ? itemsList.size() : 0); }
public class SingleItemRowHolder extends RecyclerView.ViewHolder {
protected TextView tvTitle;
protected ImageView itemImage;
public SingleItemRowHolder(View view) { super(view);
this.tvTitle = (TextView) view.findViewById(R.id.tvTitle); this.itemImage = (ImageView) view.findViewById(R.id.itemImage);
view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {
Toast.makeText(v.getContext(), tvTitle.getText(), Toast.LENGTH_SHORT).show();
} });
}
}
}
|
ScreenShots=========
Source code========
DropBox LinkDemo========
No comments:
Post a Comment