Android ListViewの更新
Bonjour!!
今DBの勉強のためにTodoリストのアプリを作ってます。
Todoリストの一覧表示はListViewで作ってるんですけど、
試しにまずArrayList()を使って表示の確認をしてみようと思ったら
addしてもリストの表示が増えていかないことに気づきました。
とりあえず「追加」のボタンを押したときに
再度Adapterのインスタンスを作るコードを書いてみたら
確かに更新はされたんですけど、
こうすると『追加』ボタンを押したときに延々とインスタンスが
作られる?ことになりそうだったので、
もっと簡単な方法あるだろうと思って調べてみたら
案の定ありました!
notifyDataSetChanged()
というメソッドを使ってやればいいようです!
大体ListViewを使うときは”adapter”という変数名にすることが多いかとおもうので、
実際のコードは
adapter.notifyDataSetChanged();
になりますね。
こんな感じでコードを書きました。
- package com.jour1.todo_app_sample;
- import androidx.appcompat.app.AppCompatActivity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.ArrayAdapter;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.ListView;
- import com.google.android.material.floatingactionbutton.FloatingActionButton;
- import com.google.android.material.snackbar.Snackbar;
- import java.util.ArrayList;
- import java.util.List;
- public class MainActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- final ListView lvMenu = findViewById(R.id.lvMenu);
- Button btAdd = findViewById(R.id.btAdd);
- final EditText addText = findViewById(R.id.addMemo);
- final List<String> todoList = new ArrayList<>();
- final ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this,
- android.R.layout.simple_list_item_1,todoList);
- lvMenu.setAdapter(adapter);
- btAdd.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- String inputStr = addText.getText().toString();
- todoList.add(inputStr);
- adapter.notifyDataSetChanged();
- }
- });
- }
- }
サブクラスを作る場合はサブクラスからの参照ができない
ようなので、add() , clear() , remove()といったメソッドを追加しないと
いけないみたいです。
頭の片隅に覚えておきます。
ではAu revoir!