Android ListViewの更新

Bonjour!!

 

今DBの勉強のためにTodoリストのアプリを作ってます。

Todoリストの一覧表示はListViewで作ってるんですけど、

試しにまずArrayList()を使って表示の確認をしてみようと思ったら

addしてもリストの表示が増えていかないことに気づきました。

 

 

とりあえず「追加」のボタンを押したときに

再度Adapterのインスタンスを作るコードを書いてみたら

確かに更新はされたんですけど、

こうすると『追加』ボタンを押したときに延々とインスタンスが

作られる?ことになりそうだったので、

もっと簡単な方法あるだろうと思って調べてみたら

案の定ありました!

 

 

notifyDataSetChanged()

 

というメソッドを使ってやればいいようです!

大体ListViewを使うときは”adapter”という変数名にすることが多いかとおもうので、

実際のコードは

 

adapter.notifyDataSetChanged();

 

になりますね。

 

こんな感じでコードを書きました。

  1. package com.jour1.todo_app_sample;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.ArrayAdapter;
  7. import android.widget.Button;
  8. import android.widget.EditText;
  9. import android.widget.ListView;
  10. import com.google.android.material.floatingactionbutton.FloatingActionButton;
  11. import com.google.android.material.snackbar.Snackbar;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. public class MainActivity extends AppCompatActivity {
  15.     @Override
  16.     protected void onCreate(Bundle savedInstanceState) {
  17.         super.onCreate(savedInstanceState);
  18.         setContentView(R.layout.activity_main);
  19.         final ListView lvMenu = findViewById(R.id.lvMenu);
  20.         Button btAdd = findViewById(R.id.btAdd);
  21.         final EditText addText = findViewById(R.id.addMemo);
  22.         final List<String> todoList = new ArrayList<>();
  23.         final ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this,
  24.                 android.R.layout.simple_list_item_1,todoList);
  25.                 lvMenu.setAdapter(adapter);
  26.         btAdd.setOnClickListener(new View.OnClickListener() {
  27.             @Override
  28.             public void onClick(View view) {
  29.                 String inputStr = addText.getText().toString();
  30.                 todoList.add(inputStr);
  31.                 adapter.notifyDataSetChanged();
  32.             }
  33.         });
  34.     }
  35. }

 

 

 

サブクラスを作る場合はサブクラスからの参照ができない

ようなので、add() , clear() , remove()といったメソッドを追加しないと

いけないみたいです。

頭の片隅に覚えておきます。

 

ではAu revoir!