今回の内容
今回は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 件のコメント:
コメントを投稿