Membuat List dengan RecyclerView pada Android
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
}); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} | |
} |
download file apknya disini dan file projectnya disini.
Langganan:
Posting Komentar
(
Atom
)
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
BalasHapusberarti ya memang keliru gan, ngambil datanya online? yang jelas batasnya pasti ada lah.. coba di cek deh..
Hapus