AndroidのRecyclerViewを使ってデータを表示する1



![Screenshot_20170129-184755.png](https://qiita-image-store.s3.amazonaws.com/0/39073/090f6677-122e-a541-b61f-708832643d7c.png "Screenshot_20170129-184755.png")

recyclerviewを追加

```build.gradle
compile 'com.android.support:appcompat-v7:25.1.0'
compile 'com.android.support:recyclerview-v7:25.1.0'
```

RecycleViewを設定
layoutManagerにLinearLayoutManagerをセット

```xml:activity_simple_recycler_view.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/simple_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layoutManager="android.support.v7.widget.LinearLayoutManager" />
```

１つ１つのViewを設定

```xml:simple_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="64dp"
              android:orientation="vertical"
              android:padding="8dp">

    <TextView
        android:id="@+id/simple_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="@style/TextAppearance.AppCompat.Medium" />
</LinearLayout>
```

テストデータを作成

```java:DummyDataGenerator
public class DummyDataGenerator {
    public static List<String> generateStringListData() {
        ArrayList<String> list = new ArrayList<>();
        list.add("■アジア由来の牛");
        list.add("黄牛");
        list.add("草原紅牛");
        list.add("朝鮮牛");
        list.add("ブラーマン種");
        list.add("ヒンドゥー種");
        list.add("カンペンセン種");
        list.add("■日本在来の牛");
        list.add("口之島牛");
        list.add("見島牛");
        list.add("見蘭牛");
        list.add("和牛");
        list.add("褐毛和種");
        list.add("黒毛和種");
        list.add("無角和種");
        list.add("日本短角種");
        list.add("■欧州由来の牛");
        list.add("アバディーン・アンガス種");
        list.add("アングラー種");
        list.add("ウェルシュブラック種");
        list.add("エアシャー種");
        list.add("キニアーナ種");
        list.add("ギャロレー種");
        list.add("グロニンゲン種");
        list.add("ケリー種");
        list.add("ゲルプフィー種");
        list.add("サウスデボン種");
        list.add("ジャージー種");
        list.add("シャロレー種");
        list.add("ショートホーン種");
        list.add("シンメンタール種");
        list.add("スウェーデンレッドアンドホワイト種");
        list.add("デキスター種");
        list.add("デボン種");
        list.add("デーリィショートホーン種");
        list.add("ノルウェーレッド種");
        list.add("ノルマン種");
        list.add("ハイランド種");
        list.add("パイルージュフランドル種");
        list.add("ピンツガウエル種");
        list.add("フィンランド種");
        list.add("ブラウンスイス種");
        list.add("ヘレフォード種");
        list.add("ホルスタイン種");
        list.add("マレーグレー種");
        list.add("マルキジアーナ種");
        list.add("ミューズラインイーセル種");
        list.add("ムーザン種");
        list.add("モンベリエール種");
        list.add("リンカーンレッド種");
        list.add("レッドデーニッシュ種");
        list.add("レッドポール種");
        list.add("ロートフィー種");
        list.add("ロマニョーラ種");
        list.add("ホワイトベルテッドギャラウェイ種");
        return list;
    }
}
```


Adapterを設定

```java:SimpleStringAdapter
public class SimpleStringAdapter extends RecyclerView.Adapter<SimpleStringAdapter.ViewHolder> {
    protected List<String> dataset;
    private View.OnClickListener onItemViewClickListener;

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public final TextView textView;

        public ViewHolder(View v) {
            super(v);
            textView = (TextView) v.findViewById(R.id.simple_text_view);
        }
    }

    public SimpleStringAdapter(List<String> myDataset){
        dataset = myDataset;
    }

    public void setOnItemClickListener(View.OnClickListener onItemClickListener){
        this.onItemViewClickListener = onItemClickListener;
    }
    // 新しいViewHolderを作成する(LayoutManagerから呼び出される)
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.simple_row, parent, false);
        // Viewにクリックリスナをつける。Viewを押した時のアクション
        if (onItemViewClickListener != null){
            v.setOnClickListener(onItemViewClickListener);
        }

        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    //Viewの中のデータを変更する(LayoutManagerから呼び出される)
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        String text = dataset.get(position);
        holder.textView.setText(text);
    }

    //データの数を返す (LayoutManagerから呼び出される)
    @Override
    public int getItemCount() {
        return dataset.size();
    }
}
```



```java:MainActivity
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private SimpleStringAdapter simpleStringAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //RecycleViewをセット
        setContentView(R.layout.activity_simple_recycler_view);
        setupView();
    }

    private void setupView(){
        //一つ一つのViewをセット
        recyclerView = (RecyclerView) findViewById(R.id.simple_recycler_view);

        simpleStringAdapter = new SimpleStringAdapter(DummyDataGenerator.generateStringListData());
        //ボタンを押した時のアクション用
        simpleStringAdapter.setOnItemClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(), "Position:" + recyclerView.getChildAdapterPosition(view) + "がクリックされました。", Toast.LENGTH_SHORT).show();
            }
        });

        recyclerView.setAdapter(simpleStringAdapter);
    }
}
```