[Android] Support Library v7 : AppCompat – CardView – RecyclerView dan OnClickListener

screenshot

Clone Github disini

Kali ini kita cerita ttg support library v7 yang diantaranya ada library appcompat, cardview, n recyclerview. Library v7 ini support untuk Material Design dan bisa digunakan hingga API 7. Diantara library yang disediakan, ketiga library yang disebut diawal adalah library yang paling sering digunakan. So kita akan coba bikin app buat demo’in ketiga library tsb. So let’s roll ūüôā

1. Buat New Android Application Project

Disini digunakan Eclipse Luna dengan Android SDK, dengan Min SDK : API 15, Target SDK : API 23, dan Compile With : API 23. Nama aplikasi : RecyclerViewDemo, dan nama package : com.bonioctavianus.recyclerviewdemo. Setelah setup wizard selesai, pastikan Support SDK sudah terinstall dengan minimal versi 23. Untuk mengeceknya klik opsi “SDK Manager” di toolbar Eclipse.

setup project

support sdk

2. Import support library v7 : AppCompat

Klik “File” -> “Import…” -> “Existing Android Code Into Workspace” -> kemudian browse ke direktori SDK anda. Lalu masuk ke direktori “direktori_sdk_anda/sdk/extras/android/support/v7“, kemudian pilih “appcompat“. Setelah itu centang opsi “Copy projects into workspace“, and klik “Finish“.

Langkah berikutnya adalah expand direktori “libs” project “android-support-v7-appcompat“, kemudian pilih “android-support-v4.jar” -> klik kanan -> “Build Path” -> “Add to Build Path“. Lakukan hal yang sama untuk “android-support-v7-appcompat.jar“.

Next klik kanan project “android-support-v7-appcompat” -> “Properties” -> “Android” -> kemudian centang opsi “Android 6.0” di pengaturan “Project Build Target“. Centang opsi “Is Library” -jika belum tercentang-, berikutnya klik “Apply“. Setelah itu masuk ke menu “Java Build Path” di sebelah kiri -> Tab “Order and Export” -> centang box “android-support-v4.jar” dan “android-support-v7-appcompat.jar“, dan “Android Private Libraries“. Jangan centang box “Android Dependencies” -> Klik “OK“.

Jika muncul “Dependencies Error” (muncul simbol tanda seru merah), coba build all project dengan klik menu “Project” -> “Build All”. Kadang diperlukan 2x build all untuk menghilangkan error.

3. Import support library v7 : RecyclerView

Klik “File” -> “Import…” -> “Existing Android Code Into Workspace” -> kemudian browse ke direktori SDK anda. Lalu masuk ke direktori “direktori_sdk_anda/sdk/extras/android/support/v7“, kemudian pilih “recyclerview“. Setelah itu centang opsi “Copy projects into workspace“, and klik “Finish“.

Langkah berikutnya adalah expand direktori “libs” project “recyclerview“, kemudian pilih “android-support-v7-recyclerview.jar” -> klik kanan -> “Build Path” -> “Add to Build Path“.

Next klik kanan project “recyclerview” -> “Properties” -> “Android” -> kemudian centang opsi “Android 6.0” di pengaturan “Project Build Target“. Centang opsi “Is Library” -jika belum tercentang-, berikutnya klik “Apply“. Setelah itu masuk ke menu “Java Build Path” di sebelah kiri -> Tab “Order and Export” -> centang box “android-support-v7-recyclerview.jar” dan “Android Private Libraries“. Jangan centang box “Android Dependencies” -> Klik “OK“.

Jika muncul “Dependencies Error” (muncul simbol tanda seru merah), coba build all project dengan klik menu “Project” -> “Build All”. Kadang diperlukan 2x build all untuk menghilangkan error.

4. Import support library v7 : CardView

Klik “File” -> “Import…” -> “Existing Android Code Into Workspace” -> kemudian browse ke direktori SDK anda. Lalu masuk ke direktori “direktori_sdk_anda/sdk/extras/android/support/v7“, kemudian pilih “cardview“. Setelah itu centang opsi “Copy projects into workspace“, and klik “Finish“.

Langkah berikutnya adalah expand direktori “libs” project “cardview“, kemudian pilih “android-support-v7-cardview.jar” -> klik kanan -> “Build Path” -> “Add to Build Path“.

Next klik kanan project “cardview” -> “Properties” -> “Android” -> kemudian centang opsi “Android 6.0” di pengaturan “Project Build Target“. Centang opsi “Is Library” -jika belum tercentang-, berikutnya klik “Apply“. Setelah itu masuk ke menu “Java Build Path” di sebelah kiri -> Tab “Order and Export” -> centang box “android-support-v7-cardview.jar” dan “Android Private Libraries“. Jangan centang box “Android Dependencies” -> Klik “OK“.

Jika muncul “Dependencies Error” (muncul simbol tanda seru merah), coba build all project dengan klik menu “Project” -> “Build All”. Kadang diperlukan 2x build all untuk menghilangkan error.

5. Pasang support library ke project utama (RecyclerViewDemo)

Setelah proses import semua support library yang dibutuhkan selesai, next kita akan pasang library-library tsb. ke project RecyclerViewDemo. Klik kanan RecyclerViewDemo -> Properties -> Android -> Kik “Add” di kotak “Library” -> Pilih “android-support-v7-appcompat” -> “OK” -> “Apply“. Lakukan hal yang sama untuk library “recyclerview” dan “cardview“. Next klik “OK“.

Setelah itu hapus method “onCreateOptionsMenu” dan “onOptionsItemSelected” dari class “MainActivity.java“,¬†dan hapus “item menu” dari file “/res/menu/main“. -karena kita tidak membutuhkan action overflow menu-. Hapus juga textview “Hello World” dari layout “activity_main.xml“. And now let’s start coding ūüôā

6. Buat file color.xml

Buat file “color.xml” di “/res/values“. Disini kita buat file “color.xml” sebagai resources warna. Warna yang akan digunakan disesuaikan dengan standar warna Material Design.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    
    <color name="colorPrimaryDark">#1976D2</color>
    <color name="colorPrimary">#2196F3</color>
    <color name="textColorPrimary">#FFFFFF</color>
    <color name="windowBackground">#FAFAFA</color>
    <color name="navigationBarColor">#000000</color>
    <color name="colorAccent">#FF4081</color>
    <color name="colorTab">#FFFFFF</color>
    
</resources>

7. Modifikasi file styles.xml

Next step kita akan modifikasi file “styles.xml” dengan mengikuti style “Material Design”, so modifikasi file “styles.xml” seperti ini :

<resources>

    <style name="MyTheme" parent="MyTheme.Base"></style>

    <style name="MyTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

Jangan lupa untuk mengganti nama style yang digunakan “MainActivity” di file “AndroidManifest.xml” menjadi “MyTheme“.

8. Modifikasi file strings.xml

Modifikasi file “strings.xml” untuk resources string yang akan digunakan :

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">RecyclerViewDemo</string>
    
    <string name="ic_launcher">Icon Launcher</string>
    <string name="textview">TextView Text</string>
    <string name="button">Button</string>

</resources>

9. Buat layout “toolbar.xml”

Buat layout untuk Toolbar di “/res/layout“. Layout “toolbar.xml” ini berfungsi untuk menampilkan toolbar. Layout ini dibuat terpisah, dan nantinya akan di “include” di layout “activity_main.xml“.

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

10. Buat layout “row_list.xml”

Buat layout “row_list.xml” di “/res/layout“. Layout “row_list.xml” ini berfungsi untuk layout setiap row dari RecyclerView. Disini kita menggunakan CardView, ImageView, TextView, dan Button.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/root_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.support.v7.widget.CardView
        android:id="@+id/cardview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_margin="10dp"
        app:cardBackgroundColor="@android:color/white"
        app:cardCornerRadius="5dp"
        app:cardElevation="5dp"
        app:cardUseCompatPadding="true" >

        <LinearLayout
            android:id="@+id/container_profile"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="vertical"
            android:padding="15dp" >

            <ImageView
                android:id="@+id/imageview"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:contentDescription="@string/ic_launcher"
                android:scaleType="fitCenter"
                android:src="@drawable/ic_launcher" />

            <TextView
                android:id="@+id/textview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_marginTop="10dp"
                android:gravity="center"
                android:text="@string/textview"
                android:textColor="@android:color/black"
                android:textSize="16sp"
                android:textStyle="bold" />

            <Button
                android:id="@+id/button"
                android:layout_width="200dp"
                android:layout_height="60dp"
                android:layout_gravity="center"
                android:gravity="center"
                android:text="@string/button" />
        </LinearLayout>
    </android.support.v7.widget.CardView>

</RelativeLayout>

11. Modifikasi file “activity_main.xml”

Modifikasi file “activity_main.xml” yang telah dibuatkan oleh Eclipse. Disini kita meng’include layout “toolbar.xml” yang telah dibuat sebelumnya.

<RelativeLayout 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"
    tools:context="com.bonioctavianus.recyclerviewdemo.MainActivity" >

    <LinearLayout
        android:id="@+id/container_toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <include
            android:id="@+id/toolbar"
            layout="@layout/toolbar" />
    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_below="@id/container_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/white"
        android:scrollbars="vertical" />

</RelativeLayout>

12. Buat class “MyToast.java”

Buat class “MyToast.java” di “/src/com.bonioctavianus.recyclerviewdemo” sebagai helper class. Method untuk menampilkan Toast dibuat static.

package com.bonioctavianus.recyclerviewdemo;

import android.content.Context;
import android.widget.Toast;

// Helper Class untuk menampilkan Toast
public class MyToast {
    
    // Method dibuat static
    public static void showToast(Context context, String message) {
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
    }
}

13. Buat class “ModelProduct.java”

Buat class “ModelProduct.java” di “/src/com.bonioctavianus.recyclerviewdemo“. Class ini berfungsi sebagai Model Class. Objek dari setiap class ini akan dimasukkan ke dalam ArrayList, yang kemudian akan dibinding ke RecyclerView Adapter.

package com.bonioctavianus.recyclerviewdemo;

// Model Class
public class ModelProduct {
    int image;
    String text;
    
    // Constructor
    public ModelProduct(int image, String text) {
        this.image = image;
        this.text = text;
    }
}

14. Buat class “RecyclerAdapter.java”

Buat class “RecyclerAdapter.java” di “/src/com.bonioctavianus.recyclerviewdemo“. Class ini berfungsi sebagai RecyclerView Adapter yang akan mem’binding ArrayList yang berisi objek dari class Model Product, ke RecyclerView. Disini juga kita akan meng’implements OnClickListener.

package com.bonioctavianus.recyclerviewdemo;

import java.util.List;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
    private List<ModelProduct> listProduct; // ArrayList untuk setiap objek model product
    private static OnRecyclerClick clickListener; // objek listener untuk interface OnRecyclerClick
    
    // constructor
    public RecyclerAdapter(List<ModelProduct> listProduct, OnRecyclerClick clickListener) {
        this.listProduct = listProduct;
        RecyclerAdapter.clickListener = clickListener;
    }
    
    // static class untuk teknik ViewHolder
    public static class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener {
        ImageView imgview;
        TextView textview;
        Button button;

        public ViewHolder(View v) {
            super(v);
            
            // inflating setiap view dari layout "row_list.xml"
            imgview = (ImageView) v.findViewById(R.id.imageview);
            textview = (TextView) v.findViewById(R.id.textview);
            button = (Button) v.findViewById(R.id.button);
            
            // set click listener untuk setiap view, termasuk layout container (v)
            v.setOnClickListener(this);
            imgview.setOnClickListener(this);
            textview.setOnClickListener(this);
            button.setOnClickListener(this);
        }

        // untuk setiap event click, dilakukan callback ke class MainActivity 
        // dengan parameter "View" dan "row position"
        @Override
        public void onClick(View v) {
            clickListener.onRecyclerClick(v, getLayoutPosition());
        }
    }

    @Override
    public int getItemCount() {
        return listProduct.size();
    }

    // binding imageview dan textview dengan data dari model product
    @Override
    public void onBindViewHolder(ViewHolder vh, int position) {
        vh.imgview.setImageResource(listProduct.get(position).image);
        vh.textview.setText(listProduct.get(position).text);
    }

    // inflating layout "row_list" untuk setiap row recyclerview
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup vg, int eventType) {
        View v = LayoutInflater.from(vg.getContext()).inflate(R.layout.row_list, vg, false);
        ViewHolder vh = new ViewHolder(v);
        
        return vh;
    }
}

15. Buat interface “OnRecyclerClick.java”

Buat interface “OnRecyclerClick” di “/src/com.bonioctavianus.recyclerviewdemo“. Interface “OnRecyclerClick” ini berfungsi sebagai Callback Interface antara class RecyclerAdapter.java dengan MainActivity.java. Class “MainActivity.java” akan meng’implements interface ini.

package com.bonioctavianus.recyclerviewdemo;

import android.view.View;

// interface untuk handle event click dari class RecyclerAdapter.java
public interface OnRecyclerClick {
    
    // method yang akan dioverride di class MainActivity.java
    // method ini mempunyai parameter "View yang diclick", dan "Row Position" dari RecyclerView
    public void onRecyclerClick(View v, int position);

}

16. Modifikasi class “MainActivity.java”

Modifikasi class “MainActivity.java” yang telah dibuatkan oleh Eclipse. Class ini akan membuat objek dari class “ModelProduct.java“, kemudian memasukkannya ke ArrayList. Berikutnya membuat objek dari class “RecyclerAdapter.java” dan memasangnya ke RecyclerView. Hal yang perlu diperhatikan di class ini adalah : RecyclerView harus menggunakan LinearLayoutManager, dan kita harus meng’override method “onRecyclerClick” yang terdapat di interface “OnRecyclerClick” untuk menerima event click dari class “RecyclerAdapter.java“.

package com.bonioctavianus.recyclerviewdemo;

import java.util.ArrayList;
import java.util.List;

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 android.view.View;

public class MainActivity extends AppCompatActivity implements OnRecyclerClick {
    private Toolbar mToolbar;
    private RecyclerView mRecyclerView;
    private RecyclerAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
        initToolbar();
        initContent();
    }

    private void initView() {
        mToolbar = (Toolbar) findViewById(R.id.toolbar);

        // recyclerview harus menggunakan LinearLayoutManager
        mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
        LinearLayoutManager llm = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(llm);
    }

    // setup toolbar
    private void initToolbar() {
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
    }

    // membuat lima objek ModelProduct -> mengisi List<ModelProduct>
    // kemudian membuat objek RecyclerAdapter dengan parameter
    // List<ModelProduct> dan "this / objek dari class ini" sebagai OnRecyclerClick listener
    private void initContent() {
        ModelProduct mProductSatu = new ModelProduct(R.drawable.ic_launcher,
                "Product Satu");
        ModelProduct mProductDua = new ModelProduct(R.drawable.ic_launcher,
                "Product Dua");
        ModelProduct mProductTiga = new ModelProduct(R.drawable.ic_launcher,
                "Product Tiga");
        ModelProduct mProductEmpat = new ModelProduct(R.drawable.ic_launcher,
                "Product Empat");
        ModelProduct mProductLima = new ModelProduct(R.drawable.ic_launcher,
                "Product Lima");

        // memasukkan semua objek ke ArrayList
        List<ModelProduct> listProduct = new ArrayList<ModelProduct>();
        listProduct.add(mProductSatu);
        listProduct.add(mProductDua);
        listProduct.add(mProductTiga);
        listProduct.add(mProductEmpat);
        listProduct.add(mProductLima);

        // membuat objek RecyclerAdapter
        mAdapter = new RecyclerAdapter(listProduct, this);

        // set adapter ke recyclerview
        mRecyclerView.setAdapter(mAdapter);
    }

    // switch - case untuk "View Id" untuk setiap View saat callback recyclerclick terjadi
    @Override
    public void onRecyclerClick(View v, int position) {
        switch (v.getId()) {
        case R.id.root_container:
            MyToast.showToast(this, "Container click di posisi : " + position);
            break;
        case R.id.imageview:
            MyToast.showToast(this, "ImageView click di posisi : " + position);
            break;
        case R.id.textview:
            MyToast.showToast(this, "TextView click di posisi : " + position);
            break;
        case R.id.button:
            MyToast.showToast(this, "Button click di posisi : " + position);
            break;
        default:
            break;

        }
    }
}

17. File “AndroidManifest.xml”

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bonioctavianus.recyclerviewdemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="23" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/MyTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

18. Run Aplikasi

And now run the app ! hehehe.. Disini setiap event click yang terjadi untuk setiap view (CardView, ImageView, TextView, dan Button) dari class “RecyclerAdapter.java“, akan dikirimkan ke class “MainActivity.java” dengan format parameter -> “view yang di’click” dan “row position dari RecyclerView”. So walaupun memang berbeda dengan ListView, kita tetap bisa menghandle event click dari RecyclerView dengan cara ini.

And so that’s it ! Thx for reading ūüôā

References : tutsplus, little robots

Iklan

4 respons untuk ‚Äė[Android] Support Library v7 : AppCompat – CardView – RecyclerView dan OnClickListener‚Äô

    1. Terimakasih atas kunjungannya ūüôā

      hmm setau saya ada 2 cara..

      1. Override method onBindViewHolder() adapter, berdasarkan data model yang diterima untuk posisi tertentu. Setelah itu di field objek tersebut di “if-else” berdasarkan kebutuhan :

      Contoh :

      Objek data model mempunyai field integer, yang nanti akan di “if-else”.

      public class DataModel {
      
          private int type; // field yang akan di "if-else"
          private String content;
      
          public DataModel(int type, String content) {
              this.type = type;
              this.content = content;
          }
      
          public int getType() {
              return type;
          }
      
          public String getContent() {
              return content;
          }
      
          public static ArrayList<DataModel> getListDataModel() {
              ArrayList<DataModel> listDataModel = new ArrayList<DataModel>();
              listDataModel.add(new DataModel(0, "Type 1"));
              listDataModel.add(new DataModel(1, "Type 2"));
      
              return listDataModel;
          }
      }
      

      Contoh Adapter :

      public class CardViewAdapter extends RecyclerView.Adapter<CardViewAdapter.ViewHolder> {
          public static final String TAG = CardViewAdapter.class.getSimpleName();
      
          private Context context;
          private ArrayList<DataModel> listDataModel;
      
          public CardViewAdapter(Context context, ArrayList<DataModel> listDataModel) {
              this.context = context;
              this.listDataModel = listDataModel;
          }
      
          @Override
          public int getItemCount() {
              return listDataModel.size();
          }
      
          @Override
          public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
              View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_card, parent, false);
              ViewHolder vh = new ViewHolder(v);
      
              return vh;
          }
      
          @Override
          public void onBindViewHolder(final ViewHolder viewHolder, int position) {
              DataModel dataModel = listDataModel.get(position);
      
              viewHolder.container.setBackgroundColor(Color.parseColor("#FFFF00"));
      
      				// disini kita "if-else" untuk menentukan background untuk cardview
              if (dataModel.getType() == 0) {
                  viewHolder.container.setBackgroundColor(Color.parseColor("#FFFF00"));
      
              } else {
                  viewHolder.container.setBackgroundColor(Color.parseColor("#FF0000"));
              }
      
              viewHolder.tvContent.setText(dataModel.getContent());
          }
      
          static class ViewHolder extends RecyclerView.ViewHolder {
      
              CardView cardView;
              RelativeLayout container;
              TextView tvContent;
      
              public ViewHolder(View v) {
                  super(v);
      
                  cardView = (CardView) v.findViewById(R.id.cv);
                  container = (RelativeLayout) v.findViewById(R.id.container);
                  tvContent = (TextView) v.findViewById(R.id.tv_cardview);
              }
          }
      }
      

      Contoh Activity :

      public class CardViewActivity extends AppCompatActivity {
          public static final String TAG = CardViewActivity.class.getSimpleName();
      
          private CardViewAdapter adapter;
          private ArrayList<DataModel> listDataModel;
      
          private RecyclerView recyclerView;
      
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_card_view);
      
              initView();
              displayContent();
          }
      
          private void initView() {
              recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
              recyclerView.setLayoutManager(new LinearLayoutManager(this));
          }
      
          private void displayContent() {
              listDataModel = DataModel.getListDataModel();
              adapter = new CardViewAdapter(this, listDataModel);
              recyclerView.setAdapter(adapter);
          }
      }
      

      Cara kedua yaitu menggunakan dua class viewholder yang menggunakan layout yang berbeda. Objek viewholder akan dibuat berdasarkan item view type yang kita tentukan sebelumnya.

      public class CardViewAdapter extends RecyclerView.Adapter {
          public static final String TAG = CardViewAdapter.class.getSimpleName();
      
          private static final int VIEW_TYPE_1 = 0; // item view type untuk ViewHolderSatu
          private static final int VIEW_TYPE_2 = 1; // item view type untuk ViewHolderDua
      
          private Context context;
          private ArrayList<DataModel> listDataModel;
      
          public CardViewAdapter(Context context, ArrayList<DataModel> listDataModel) {
              this.context = context;
              this.listDataModel = listDataModel;
          }
      
          @Override
          public int getItemCount() {
              return listDataModel.size();
          }
      
      		// disini kita menentukan item view type yang akan dibuat berdasarkan field "type" pada objek DataModel.
      		// jika field "type" == 1, maka itemViewType adalah 0, jika tidak maka itemViewType adalah 1
          @Override
          public int getItemViewType(int position) {
              return listDataModel.get(position).getType() == 0 ? VIEW_TYPE_1 : VIEW_TYPE_2;
          }
      
          @Override
          public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
      				// disini kita harus menggunakan return type parent class (RecyclerView.ViewHolder)
      
              RecyclerView.ViewHolder vh;
      
              if (viewType == VIEW_TYPE_1) {
      
                  // create viewholder untuk cardview tipe 1 dengan layout R.layout.row_card_satu
      
                  View v = LayoutInflater.from(parent.getContext()).inflate(
                          R.layout.row_card_satu, parent, false);
                  vh = new ViewHolderSatu(v);
      
              } else {
      
                  // create viewholder untuk cardview tipe 2 dengan layout R.layout.row_card_dua
      
                  View v = LayoutInflater.from(parent.getContext()).inflate(
                          R.layout.row_card_dua, parent, false);
                  vh = new ViewHolderDua(v);
              }
      
              return vh;
          }
      
          @Override
          public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
              if (holder instanceof ViewHolderSatu) {
      
                  // bind data untuk viewholder satu
      
                  DataModel dataModel = listDataModel.get(position);
                  ((ViewHolderSatu) holder).tvContent.setText(dataModel.getContent());
      
              } else {
      
                  // bind data untuk viewholder dua
      
                  ((ViewHolderDua) holder).tvContent.setText("ViewHolder Dua");
              }
          }
      
          static class ViewHolderSatu extends RecyclerView.ViewHolder {
      
              CardView cardView;
              RelativeLayout container;
              TextView tvContent;
      
              public ViewHolderSatu(View v) {
                  super(v);
      
                  cardView = (CardView) v.findViewById(R.id.cv);
                  container = (RelativeLayout) v.findViewById(R.id.container);
                  tvContent = (TextView) v.findViewById(R.id.tv_cardview);
              }
          }
      
          static class ViewHolderDua extends RecyclerView.ViewHolder {
      
              CardView cardView;
              RelativeLayout container;
              TextView tvContent;
      
              public ViewHolderDua(View v) {
                  super(v);
      
                  cardView = (CardView) v.findViewById(R.id.cv);
                  container = (RelativeLayout) v.findViewById(R.id.container);
                  tvContent = (TextView) v.findViewById(R.id.tv_cardview);
              }
          }
      }
      

      Semoga bisa membantu ūüôā

      Suka

    1. trims sudah mampir kesini gan ūüôā untuk IDE yang digunakan masih Eclipse atau Android Studio ya ? kalau IDE Eclipse seharusnya ada, mungkin bisa dicek lagi.. kalau IDE Android Studio namanya menjadi ‘Android Support Repository’.

      Suka

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google+

You are commenting using your Google+ account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s