Android - RecyclerView
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:リストを表示する