AndroidStudio リスト アイテムの選択

## 選択したアイテムの文字列を取得しテキストビューに反映させる
:::note info
## イメージ
![携帯.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953063/418ee3e2-8a4c-27db-649a-ea026f240f5c.gif)
:::

**テキストビューとリストを配置する**
参考資料　→　[**リストの作成**](https://qiita.com/mk-000856/items/104bd7075fd90e22fd23)

それぞれに+@<foo>idの設定を行う
今回は下記で設定している
ListView → android:id="@+id/testList"
TextView → android:id="@+id/testText"

## 選択時の処理を記述する
**MainActivity.java**へ追記する
~~~java:MainActivity.java追加後
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //＋＋＋＋追加＋＋＋＋＋
    private class ListClickTest implements AdapterView.OnItemClickListener{
        @Override
        public void onItemClick(AdapterView<?> parent,View view,int position,long notInUse){
            String item = (String)parent.getItemAtPosition(position);
            item = "選んだアイテム　＝　"+item;
            TextView textview = findViewById(R.id.testText);
            textview.setText(item);
        }
    }
    //＋＋＋＋＋＋＋＋＋＋＋
}    
    
}
~~~

:::note info
## クラスとメソッド
クラス
**private class クラス名 implements AdapterView.OnItemClickListener**

メソッド
@<foo>Override
**public void onItemClick(AdapterView<<foo>?> parent,View view,int position,long notInUse)**

- **引数１：AdapterView<<foo>?> 今回の変数名はparent**
リスト全体の事だと思っていればOK
<<foo>?>は型の具体的な指定をしませんみたいな意味
これ以外だとエラーが出るのでとりあえず？を入れとけばよい
- **引数２：View 今回の変数名はview**
タップされたアイテムの１行分の情報、今回は使わない
- **引数３：int 今回の変数名はposition**
リストのタップされた行の番号
上から順番に０、１、２…と番号がふられる
あいうえお　→　０
かきくけこ　→　１…
- **引数４：long 今回の変数名はnotInUse**
データベースとかで使う、今回は使わない
:::

~~~java:onItemClick()内の処理
String item = (String)parent.getItemAtPosition(position);
item = "選んだアイテム　＝　"+item;
TextView textview = findViewById(R.id.testText);
textview.setText(item);
~~~
|String item = (String)parent.getItemAtPosition(position);　　|
|:--|
|リストでタップした場所の番号(position)にある<br>アイテムの文字列を取得<br>**"あいうえお"をタップした場合は０がpositionに入り、**<br>**リスト内の番号0に対応するのが"あいうえお"となり**<br>**String型の変数 item には"あいうえお"が入る**<br>|

|TextView textview = findViewById(R.id.testText);<br>textview.setText(item);　　|
|:--|
|テキストビューを取得しテキスト表示の更新|

## リストのタップ検知
MainActivity.javaへ追記する
~~~java:MainActivity.java追加後
public class MainActivity extends AppCompatActivity {
    Toast toast;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //＋＋＋＋＋追加＋＋＋＋＋＋＋＋
        ListView listview = findViewById(R.id.testList);
        listview.setOnItemClickListener(new ListClickTest());
        //＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
    }

    private class ListClickTest implements AdapterView.OnItemClickListener{
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long notInUse){
            String item = (String)parent.getItemAtPosition(position);
            item = "選んだアイテム　＝　"+item;
            TextView textview = findViewById(R.id.testText);
            textview.setText(item);
        }
    }
}
~~~
<br></br>
追加した内容
|ListView listview = findViewById(R.id.testList);　　　<br>listview.setOnItemClickListener(new ListClickTest());　|
|:--|
|リストを取得後にそのリストのタップ時の処理を行う<br>listview.setOnItemClickListener();<br>この( )内の引数にさっき作ったクラスのインスタンスを渡し<br>そのクラスのonItemClick()内の処理を行う|

これで
1. リストのタップ
1. そのリストのアイテムの文字列を取得
1. 文字をテキストビューへ反映

ができるようになる