Laravel dan Android Tutorial

Blogger news

Membuat List dengan RecyclerView pada Android

2 komentar
Listview merupakan widget yang sudah dianggap tua. jadi sebaiknya memakai widget-widget yang terbaru. Listview ini bisa diganti dengan RecyclerView. yang sudah mendukung fungsi layout behavior untuk menerapkan show-hide toolbar. jadi sekarang latihan lagi menggunakan RecyclerView tapi dibuat semirip mungkin dengan ListView.


langkah pertama yang jelas tambahkan library support design dan recyclerview pada gradle. kemudian siapkan layout utama untuk menempatkan Toolbar dan RecyclerView.

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
lanjut ke layout untuk menampilkan data text pada RecyclerView.

<?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">
<TextView
android:id="@+id/textView_List"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:textSize="20sp"
android:text="@string/app_name"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true" />
</RelativeLayout>
bagian layout selesai lanjut ke pembuatan class adapter untuk RecyclerView.

package com.yoesuv.listrecyclerview;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
public class MyListAdapter extends RecyclerView.Adapter<MyListAdapter.ViewHolder>{
private String[] dataset;
public MyListAdapter(){
dataset = new String[50];
for(int i=0;i<50;i++){
dataset[i] = "Data ke "+i;
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_textview, null);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.tv.setText(dataset[position]);
}
@Override
public int getItemCount() {
return dataset.length;
}
class ViewHolder extends RecyclerView.ViewHolder{
TextView tv;
public ViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.textView_List);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), tv.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
}
}
}
lanjut lagi ke pembuatan class untuk tampilan. (dekorasi bentuk list)

package com.yoesuv.listrecyclerview;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.RecyclerView;
import android.view.View;
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
private Drawable mDivider;
public static final int[] ATTRS = new int[]{
android.R.attr.listDivider
};
public DividerItemDecoration(Context context){
final TypedArray a = context.obtainStyledAttributes(ATTRS);
mDivider = a.getDrawable(0);
a.recycle();
}
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDraw(c, parent, state);
drawVertical(c, parent);
}
private void drawVertical(Canvas c, RecyclerView parent){
final int left = parent.getPaddingLeft();
final int right = parent.getWidth()-parent.getPaddingRight();
final int childCount = parent.getChildCount();
for(int i=0; i<childCount;i++){
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
final int top = child.getBottom()+params.bottomMargin;
final int bottom = top+mDivider.getIntrinsicHeight();
mDivider.setBounds(left,top,right,bottom);
mDivider.draw(c);
}
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.set(0,0,mDivider.getIntrinsicHeight(),0);
}
}
dan yang paling akhir kelas utamanya seperti berikut

package com.yoesuv.listrecyclerview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.MotionEvent;
public class MainActivity extends AppCompatActivity {
private Toolbar toolbar;
private MyListAdapter myAdapter;
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if(getSupportActionBar()!=null){
getSupportActionBar().setElevation(5);
}
myAdapter = new MyListAdapter();
RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(this);
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
if(recyclerView!=null) {
recyclerView.addItemDecoration(itemDecoration);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(myAdapter);
}
}
}
jika berhasil maka aplikasi akan tampil seperti screenshot diatas, yaitu RecyclerView yang mirip ListView.

download file apknya disini dan file projectnya disini.

2 komentar :

  1. Iya gan, emg listview itu udah jadul ga kyk recycleview yg bisa di pasang byk fitur. ane mau tanya gan, klo kita bikin aplikasi contohnya aplikasi resep makanan dan kita pake recycleview klo kita pgn biar ga ngulang lg gmn gan caranya? soalnya ini ane nerapin recycleview dr youtube kok di scroll kebawah jalan terus ga berhenti, ga ada mentoknya

    BalasHapus
    Balasan
    1. berarti ya memang keliru gan, ngambil datanya online? yang jelas batasnya pasti ada lah.. coba di cek deh..

      Hapus