AS初級 リスト表示編②解説~配列を使って作成したリスト項目を選択できるようにする~

MainActivity.java

package com.example.listdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.material.snackbar.Snackbar;

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {



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

String[] list ={"abc","def","ghi","jkl"};

ListAdapter listAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1,list);
ListView listView = findViewById(R.id.listview);
listView.setAdapter(listAdapter);

listView.setOnItemClickListener(this);
}

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
TextView item = (TextView) view;
Toast.makeText(MainActivity.this, item.getText(),Toast.LENGTH_LONG).show();
}

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"
tools:context=".MainActivity">

<ListView
android:id="@+id/listview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />


</LinearLayout>

このサンプルコードでは少し書き方が変わってますが気づきますでしょうか?

後半では、この書き方について、以前出てきた OnClickListenerの場合で説明してみます。

 

多くの方は、初めは、ボタンを押したときの動作をAndroid Studioで作成する場合、onClick属性を使用するでしょう。

activity_xmlで、<Button>タグ内で、android:onClick="pushedBtn" と記載して

MainActivity.javaで、onCreateメソッドと並列に、

public void pushedBtn( ){  //ボタンを押したときの動作を記載}

というような方法です。

ただこの方法は、ボタンの場合は簡単にできますが、今回のようにリストを押す際には、onItemClick属性というのはありますが、同じような方法では作成できません。

その点、Javaで記載する方法ならば、ボタンの場合は、setOnClickListener( )メソッドを使用すればよいし、リストの場合は、setItemClickListener( )メソッドを使用すればよいし、書き方は同様です。

Javaファイルでの記載方法は2つありますが(ラムダ式で書くとかを除いても)

上のサンプロコードが2つ目です。