ListViewが複数ある時に押下したリストによって、処理を変える方法

##はじめに
ListViewが以下のように複数のリストがあるときに、タッチしたリストによって処理を変える方法です。

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/food"
        android:id="@+id/food"></ListView>
    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/drink"
        android:id="@+id/drink"></ListView>

##コード
フードのリストをタッチしたときは「あなたが選んだ食べ物は○○」、
ドリンクのリストをタッチしたときは「あなたが選んだ飲み物は○○」と表示されるトーストを作ってみます。

```strings.xml
<resources>
    <string name="app_name">ListView</string>
    <string name="text_food">フード</string>
    <string name="text_drink">ドリンク</string>
    <string-array name="food">
        <item>肉</item>
        <item>魚</item>
    </string-array>
    <string-array name="drink">
        <item>ジュース</item>
        <item>お茶</item>
    </string-array>
</resources>
```

```activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/text_food"/>
    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/food"
        android:id="@+id/food"></ListView>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/text_drink"/>
    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/drink"
        android:id="@+id/drink"></ListView>

</LinearLayout>
```

```MainActivity.java
package com.websarva.wings.android.listview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView foodListView = findViewById(R.id.food);
        ListView drinkListView = findViewById(R.id.drink);

        foodListView.setOnItemClickListener(new ListItemClickListener());
        drinkListView.setOnItemClickListener(new ListItemClickListener());
    }

    /**
     * ListView内のitem押下時の処理
     */
    private class ListItemClickListener implements AdapterView.OnItemClickListener{
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id){
            ListView foodList = findViewById(R.id.food);
            ListView drinkList = findViewById(R.id.drink);

            String item = (String) parent.getItemAtPosition(position);
            String show;

            if(parent == foodList){
                show = "あなたが選んだ食べ物は" + item;
                Toast.makeText(MainActivity.this,show,Toast.LENGTH_LONG).show();
            }

            if (parent == drinkList){
                show = "あなたが選んだ飲み物は" + item;
                Toast.makeText(MainActivity.this,show,Toast.LENGTH_LONG).show();
            }
        }
    }
}

```

##実行結果

![新しいビットマップ イメージ.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587966/6b2925b9-df4a-ebae-0fe0-caca38d3c4f9.jpeg)

左で表示されているトーストは肉をタッチしたので、「あなたが選んだ食べ物は○○」が表示、
右で表示されているトーストはジュースをタッチしたので、「あなたが選んだので、飲み物は○○」
が表示されています。

##解説

```OnItemClickListener
 private class ListItemClickListener implements AdapterView.OnItemClickListener{
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id){
            ListView foodList = findViewById(R.id.food);      ・・・➀
            ListView drinkList = findViewById(R.id.drink);    ・・・➀

            String item = (String) parent.getItemAtPosition(position);
            String show;

            if(parent == foodList){                           ・・・➁
                show = "あなたが選んだ食べ物は" + item;
                Toast.makeText(MainActivity.this,show,Toast.LENGTH_LONG).show();
            }

            if (parent == drinkList){                         ・・・➁
                show = "あなたが選んだ飲み物は" + item;
                Toast.makeText(MainActivity.this,show,Toast.LENGTH_LONG).show();
            }
        }
    }
```

###➀ListViewのIDを取得する
どのリストがタッチされたか判別するために、findViewByIdメソッドを使用して各ListViewのIDを取得する。

###➁タッチされたListViewによって、処理を変える
➀で取得したIDをparentと比較して、タッチされたListViewを判別して、処理を実行する。
※parentはタッチされたリスト全体。