質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

解決済

遷移先から戻ってきたらListViewを更新したい

Nooki
Nooki

総合スコア18

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

1回答

0リアクション

0クリップ

433閲覧

投稿2022/09/10 17:55

編集2022/09/10 18:05

前提

android studioを使って下記のようなメモアプリを作成しています。
■メイン画面:
ListViewでメモの一覧を表示する画面(activity_main.xml)メモ追加ボタンをクリックするとメモ追加画面に遷移します。
■メモ追加画面:
メモのタイトルと内容を入力し、保存ボタンを押すとMySQLにメモデータ(メモタイトル、内容、更新日時)が保存されます。
戻るボタンをクリックするとメイン画面に遷移します。
遷移後メイン画面に追加したメモを表示します。
■言語
Java

実現したいこと

メモ追加画面でメモデータを追加し、メイン画面に戻ったら追加したメモデータをListViewに表示したい。

発生している問題・エラーメッセージ

メモ追加画面でデータベースにメモ情報を追加し、runを実行するとことでメイン画面に追加したメモを表示するところまでできたのですが、メモ追加画面からメイン画面に遷移した際に追加したメモデータをListViewに表示させることができません。
(メモデータを追加する前のままで行が増えません。)
該当のソースコードにある※1のrefreshItemList()メソッドをclass MainActivityから呼び出しデータベースから取得したメモデータを更新しようとしましたが、refreshItemList()呼び出しで「シンボルが見つかりません。」が発生し呼び出せません。

教えていただきたいこと

メモ追加画面からメイン画面に遷移した際、ListViewに最新のメモデータを表示する(ListViewの更新)方法を教えてください。

該当のソースコード

ListViewAdapter.java

package com.example.memoapp_android; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.List; public class ListViewAdapter extends BaseAdapter { static class ViewHolder { TextView titleView; TextView timeStampView; } public List<Item> itemList; private final LayoutInflater inflater; private final int itemLayoutId; ListViewAdapter(Context context, int itemLayoutId, List<Item> itemList) { super(); this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.itemLayoutId = itemLayoutId; this.itemList = itemList; } //※1 public void refreshItemList(Context context) { this.itemList.clear(); TestOpenHelper helper = new TestOpenHelper(context); // createMemoDataList()は別クラスで実装しているデータベースからメモデータを取得するメソッドです。 // 下記でインスタンスで保持しているメモデータを更新しています。 this.itemList = helper.createMemoDataList(); } @Override //一行ずつmemoの情報を紐づけていきます public View getView(int position, View convertView, ViewGroup parent) { Log.d("mydebug","****getView1 position***"+position); Item item = itemList.get(position); ViewHolder holder; // 最初だけ View を inflate して、それを再利用する if (convertView == null) { // activity_main.xml に list.xml を inflate して convertView とする convertView = inflater.inflate(itemLayoutId, parent, false); // ViewHolder を生成 holder = new ViewHolder(); holder.titleView = convertView.findViewById(R.id.titleView); holder.timeStampView = convertView.findViewById(R.id.timeStampView); convertView.setTag(holder); } // holder を使って再利用 else { holder = (ViewHolder) convertView.getTag(); } // holder の titleView にセットするとList ViewのtitleViewに値が入る holder.titleView.setText(item.getItemTitle()); // 現在の position にあるmemoのタイトルリストを holder の textView にセット holder.timeStampView.setText(item.getItemTimeStamp()); return convertView; } @Override //リストに表示するデータの個数です public int getCount() { return itemList.size(); } @Override //引数で指定された位置にある定食の情報を返します public Object getItem(int position) { return itemList.get(position); } @Override //引数で指定された位置にあるListVewの_id(データベースのid)を返します public long getItemId(int position) { return itemList.get(position).getItemId(); } }

MainAcivity.java

package com.example.memoapp_android; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AlertDialog; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ListView; import com.google.android.material.floatingactionbutton.FloatingActionButton; import java.util.List; public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener { private TestOpenHelper helper; private SQLiteDatabase db; private BaseAdapter adapter; // 要素の削除、順番変更のためArrayListを定義 private List<String> itemNames; private List<String> itemTimeStamps; // タップされたitemの位置 private int tappedPosition = 0; List<Item> memoDataList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (helper == null) { helper = new TestOpenHelper(getApplicationContext()); } memoDataList = helper.createMemoDataList(); // ListViewのインスタンスを生成 ListView listView = findViewById(R.id.list_view); // BaseAdapter を継承したadapterのインスタンスを生成 // レイアウトファイル list.xml を activity_main.xml に inflate するためにadapterに引数として渡す adapter = new ListViewAdapter(this.getApplicationContext(), R.layout.list, memoDataList); View header = (View)getLayoutInflater().inflate(R.layout.header,null); listView.addHeaderView(header); // ListViewにadapterをセット listView.setAdapter(adapter); // 下記をセットするとヘッダーをクリックしても反応しなくなる。 // header.setFocusable(true); //イベントを拾えるようにListenerをlistViewに登録する。 // クラス定義でimplementsしているため、引数がthisでOK。implementsしていない場合、thisを引数の型へキャストが必要 listView.setOnItemClickListener(this); listView.setOnItemLongClickListener(this); // FloatingActionButton FloatingActionButton fab = findViewById(R.id.add_fab); // implementsしない場合はonCreate()内にListenerを実装する。 fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 遷移先の画面はAndroidManifest.xmlに記載が必要 Intent intent = new Intent(getApplication(), AddEditMemo.class); startActivity(intent); } }); } // ~~~~~~~~~中略~~~~~~~~~ @Override // メモ追加画面からメイン画面に戻ってきた時の処理 protected void onRestart() { super.onRestart(); // ※1下記のメソッドが「シンボルが見つかりません。」になる。(呼び出せない) // adapter.refreshItemList(getApplicationContext()); adapter.notifyDataSetChanged(); } }

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。