Gradleに追加する
compile 'com.android.support:recyclerview-v7:25.1.0'
RecyclerViewを設置する
<android.support.v7.widget.RecyclerView android:id="@+id/rview" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:layout_alignParentStart="true" />
1行用xmlつくる
row.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="20dp"> <TextView android:id="@+id/item_name" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>
Adapterをつくる
RecyclerViewのアダプタは継承するやつが決まっているっぽい。RecyclerView.Adapterというのがある。下記3つの関数を実装する必要がある。
import android.support.v7.widget.RecyclerView; import android.view.ViewGroup; public class RecyclerAdatper extends RecyclerView.Adapter{ @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return null; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { } @Override public int getItemCount() { return 0; } }
onCreateViewHolderは、ViewHolderのインスタンスをつくって返す。RecyclerView.ViewHolderを継承したViewHolderクラスである必要があって、インスタンス作成時に一行用viewを渡す。 onBindViewHolderは、holderとポジションがわたってくるので、それを使って該当ポジションデータをholderにセットする。 getItemCountは表示する数。表示可能なデータよりも多い数を指定するとエラーになる。
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RViewHolder>{ private List<String> itemList; public RecyclerAdapter(List<String> list) { itemList = list; } public static class RViewHolder extends RecyclerView.ViewHolder { public TextView nameView; public RViewHolder(View v) { super(v); nameView = (TextView) itemView.findViewById(R.id.item_name); } } @Override public RViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { ViewGroup view = (ViewGroup) LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent, false); return new RViewHolder(view); } @Override public void onBindViewHolder(RViewHolder holder, int position) { holder.nameView.setText(itemList.get(position)); } @Override public int getItemCount() { return itemList.size(); } }
MainActivityをつくる
MainActivity.java
public class MainActivity extends AppCompatActivity { private ArrayList<String> dataList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dataList = new ArrayList(); final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rview); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(new RecyclerAdapter(dataList)); createData(); } private void createData() { for (int i = 0; i < 30 ; i++ ) { dataList.add("item" + i); } } }
recyclerView.setHasFixedSize(true);は、リストのレイアウトサイズが固定の場合、setHasFixedSize()をtrueにするとパフォーマンスが向上するらしい。
参考: RecyclerView RecyclerView の基本的な使い方 [Android] RecyclerView:リストを表示する