To use RecyclerView + CardView, we have to "Add Support Libraries of RecyclerView, CardView to Android Studio Project".
Create layout of the CardView, layout/layout_cardview.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
card_view:cardCornerRadius="20sp"
card_view:cardElevation="5sp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/item_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/item_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18dp"/>
<TextView
android:id="@+id/item_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"/>
</LinearLayout>
</android.support.v7.widget.CardView>
Create our custom MyRecyclerViewAdapter extends RecyclerView.Adapter
package com.example.androidlistdrawable;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.CardView;
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 java.util.ArrayList;
import java.util.List;
public class MyRecyclerViewAdapter extends
RecyclerView.Adapter<MyRecyclerViewAdapter.ItemHolder> {
private List<String> itemsName;
private List<Integer> itemsValue;
private LayoutInflater layoutInflater;
private Context context;
public MyRecyclerViewAdapter(Context context){
this.context = context;
layoutInflater = LayoutInflater.from(context);
itemsName = new ArrayList<String>();
itemsValue = new ArrayList<Integer>();
}
@Override
public MyRecyclerViewAdapter.ItemHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
CardView itemCardView = (CardView)layoutInflater.inflate(R.layout.layout_cardview, viewGroup, false);
return new ItemHolder(itemCardView, this);
}
@Override
public void onBindViewHolder(MyRecyclerViewAdapter.ItemHolder itemHolder, int i) {
itemHolder.setItemName(itemsName.get(i));
int value = itemsValue.get(i);
itemHolder.setItemValue(String.valueOf(value));
Drawable drawable = context.getResources().getDrawable(value);
itemHolder.setImageView(drawable);
}
@Override
public int getItemCount() {
return itemsName.size();
}
public void add(int location, String iName, int iValue){
itemsName.add(location, iName);
itemsValue.add(location, iValue);
notifyItemInserted(location);
}
public void remove(int location){
if(location >= itemsName.size())
return;
itemsName.remove(location);
itemsValue.remove(location);
notifyItemRemoved(location);
}
public static class ItemHolder extends RecyclerView.ViewHolder{
private MyRecyclerViewAdapter parent;
private CardView cardView;
TextView textItemName;
TextView textItemValue;
ImageView imageView;
public ItemHolder(CardView cView, MyRecyclerViewAdapter parent) {
super(cView);
cardView = cView;
this.parent = parent;
textItemName = (TextView) cardView.findViewById(R.id.item_name);
textItemValue = (TextView) cardView.findViewById(R.id.item_value);
imageView = (ImageView) cardView.findViewById(R.id.item_image);
}
public void setItemName(CharSequence name){
textItemName.setText(name);
}
public CharSequence getItemName(){
return textItemName.getText();
}
public void setItemValue(CharSequence val){
textItemValue.setText(val);
}
public CharSequence getItemValue(){
return textItemValue.getText();
}
public void setImageView(Drawable drawable){
imageView.setImageDrawable(drawable);
}
}
}
Modify layout to add RecyclerView, layout/activity_main.xml.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:autoLink="web"
android:text="http://android-er.blogspot.com/"
android:textStyle="bold" />
<android.support.v7.widget.RecyclerView
android:id="@+id/myrecyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
com.example.androidlistdrawable.MainActivity.java
package com.example.androidlistdrawable;
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.StaggeredGridLayoutManager;
import java.lang.reflect.Field;
public class MainActivity extends AppCompatActivity {
private RecyclerView myRecyclerView;
private StaggeredGridLayoutManager staggeredGridLayoutManagerVertical;
private MyRecyclerViewAdapter myRecyclerViewAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myRecyclerView = (RecyclerView)findViewById(R.id.myrecyclerview);
staggeredGridLayoutManagerVertical =
new StaggeredGridLayoutManager(
2, //The number of Columns in the grid
LinearLayoutManager.VERTICAL);
myRecyclerViewAdapter = new MyRecyclerViewAdapter(this);
myRecyclerView.setAdapter(myRecyclerViewAdapter);
myRecyclerView.setLayoutManager(staggeredGridLayoutManagerVertical);
prepareItems();
}
private void prepareItems(){
Field[] fieldDrawables = android.R.drawable.class.getFields();
for(int i=0; i<fieldDrawables.length; i++){
Field field = fieldDrawables[i];
try {
int value = (int) field.get(fieldDrawables);
myRecyclerViewAdapter.add(
myRecyclerViewAdapter.getItemCount(),
"R.drawable." + field.getName(),
value);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
Download the files (Android Studio Format).
~ More step-by-step examples of RecyclerView + CardView.
Very thanks... Helped
ReplyDelete