今回の内容
今回はAndroid StudioのListViewの追加と削除などを紹介していきます。設置まで丁寧に説明したいと思います。今度、ListViewを活用した最強術を紹介したいと思いますが、今日の記事では紹介しません。
それではごゆっくり。
レイアウトはこうしました。
ボタン3つとListView(activity_main.xml)
コードはこんな感じです。
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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="376dp" android:layout_height="461dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.47" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.084" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="取得" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/button2" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.832" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="追加" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/button3" app:layout_constraintStart_toEndOf="@+id/button" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.832" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="全て削除" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/button2" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.832" /> </androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
こんな感じです。※package ○○.○○.○○ を省略しています。
import androidx.appcompat.app.AppCompatActivity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.widget.Adapter; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private ArrayList<String> array; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = findViewById(R.id.listView); array = new ArrayList<>(); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //取得 ボタンのクリックイベント getListItems(); } }); findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //追加ボタンのクリックイベント addItem(); } }); findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //全て削除ボタンのクリックイベント listView.setAdapter(null); array.clear(); } }); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { //アイテムがクリックされたときのイベント。 //変数 i がクリックされたアイテムの位置 //タップされたアイテムを削除します。 array.remove(i); ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1,array); listView.setAdapter(arrayAdapter); } }); } private void getListItems(){ String text = ""; ListView listView = findViewById(R.id.listView); for (int i = 0;i < listView.getCount();i++){ text += array.get(i) + "\n"; } new AlertDialog.Builder(MainActivity.this) .setMessage(text) .show(); } private void addItem(){ ListView listView = findViewById(R.id.listView); final EditText editText = new EditText(MainActivity.this); new AlertDialog.Builder(MainActivity.this) .setTitle("追加") .setMessage("追加したいアイテムの名前を入力してください。") .setView(editText) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { array.add(editText.getText().toString()); ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1,array); listView.setAdapter((adapter)); } }) .show(); } }
解説
レイアウトの方は自分で考えてください...っで、問題はMainActivity.javaの方ですよ。
ではまず、ここの行をみてください。
private ArrayList<String> array;arrayという変数を作成しています。MainActivity.java内なら、いつでもこの変数の読み取りと変更ができます。
これをこれから使っていきます。
そして、次には取得ボタンのイベントをみていきます。getListItemsという関数が呼び出されていますね。
private void getListItems(){ String text = ""; ListView listView = findViewById(R.id.listView); for (int i = 0;i < listView.getCount();i++){ text += array.get(i) + "\n"; } new AlertDialog.Builder(MainActivity.this) .setMessage(text) .show(); }text += array.get(i) + "\n" としています。
これはtextという文字列の変数にどんどん付け足すということをしています。
arrayは最初に紹介した配列です。
それのget(i)はその配列のi個目の項目を取得するということです。
それをどんどんtext変数に付け足しています。 その後、AlertDialogでtext変数の内容を表示させます。
次に、追加ボタンのイベントをみていきます。
これは、addItem関数が呼び出されていますね。
private void addItem(){ ListView listView = findViewById(R.id.listView); final EditText editText = new EditText(MainActivity.this); new AlertDialog.Builder(MainActivity.this) .setTitle("追加") .setMessage("追加したいアイテムの名前を入力してください。") .setView(editText) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { array.add(editText.getText().toString()); ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1,array); listView.setAdapter((adapter)); } }) .show(); }このコードでやっていることとして、まず最初にアラートダイアログを表示させています。
EditText入りのダイアログなので、最初にeditTextというのを作成します。それをAlertDialog.BuilderのsetViewで設置します。
んで、そこから追加するためのコードですが、「array.add(editText.getText().toString)」とあります。
editText.getText().toStringではEditTextに入力された内容を取得しています。
それをarrayに追加しています。それでけではListViewに反映されせん。ArrayAdapterを利用してListViewにsetさせなければなりません。
まず、ArrayAdapterを作成します。
ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1,array);第三引数にarrayを指定しています。このアダプターをListViewにsetAdapterすればいいのです。
次に全て削除ボタンのイベントをみていきましょう。
findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //全て削除ボタンのクリックイベント listView.setAdapter(null); array.clear(); } });listView.setAdapter(null)としていますが、本来ならば、setAdapterにはArrayAdapterを指定する必要があります。しかし、nullにすることで、空にできます。
それだけでは変数arrayに反映されていないため、array.clear()でarrayも空にしています。
次にリスト項目をタップされた後、削除するときのコードをみていきましょう。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { //アイテムがクリックされたときのイベント。 //変数 i がクリックされたアイテムの位置 //タップされたアイテムを削除します。 array.remove(i); ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1,array); listView.setAdapter(arrayAdapter); } });このときの変数iはタップされた項目の番号(位置)です。
array.remove(i)としていますが、array.removeで指定した場所の項目を削除します。
それだけでは、ListViewに反映されないので、ArrayAdapterをつくって、setAdapterしています。
疲れたのでここまでにします
コメント、大歓迎です!
0 件のコメント:
コメントを投稿