非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Android開発】SharedPreferencesからデータを取得してListViewに一覧表示する方法

   

Androidアプリで設定や軽量なデータを保存するSharedPreferencesですが、保存したデータをユーザーに見せるにはListViewへの反映が一般的です。この記事では、SharedPreferencesからすべてのデータを取得し、カンマ区切りの文字列を整形してリストに表示する具体的な実装方法を解説します。

処理の全体フロー

  • ListViewとアダプターの紐付け
  • SharedPreferencesからの全データ取得
  • TreeMapによる自動ソート
  • カンマ区切りデータの分割と整形
  • 管理用キーリストの作成
  • UIへの反映(画面更新)

インスタンス変数の定義

リスト表示を管理するためのアダプターと、データ格納用のリストを定義します。

// 表示用リストの初期化
dataList = new ArrayList<String>();
// レイアウトからListViewを取得
ListView listView = findViewById(R.id.my_list_view);

// アダプターの生成。第2引数はAndroid標準のシンプルな1行レイアウトを指定
adapter = new ArrayAdapter<String>(
        this,
        android.R.layout.simple_list_item_1, 
        dataList
);
// ListViewにアダプターをセット
listView.setAdapter(adapter);

// 後述のメソッドでSharedPreferencesから全データを取得
Map<String, String> loadedData = loadAllData();

// 取得したMapをループで回し、表示用に文字列を整形してリストに追加
for (Map.Entry<String, String> entry : loadedData.entrySet()) {
    String combinedValue = entry.getValue(); // 例: "2025/11/29,OptionA,ValueX"
    
    // カンマ区切りの文字列を分割
    String[] parts = combinedValue.split(",");
    if (parts.length == 3) {
        // カンマを改行に変換して、リスト1行分として整形
        String item = parts[0] + "\n" + parts[1] + "\n" + parts[2];
        dataList.add(item);
    }
}
// データの追加が終わったら、アダプターに画面の更新を通知
adapter.notifyDataSetChanged();
 

 

SharedPreferencesからのデータ一括読み込み

ストレージから全データを取得し、キーの昇順で並べ替えて返却するメソッドです。

private Map<String, String> loadAllData() {
    // 保存時と同じ名前 ("MyAppData") でアクセス。MODE_PRIVATEは自アプリのみ参照可能
    SharedPreferences prefs = getSharedPreferences("MyAppData", Context.MODE_PRIVATE);

    // getAll()ですべてのキーと値のペアを取得(戻り値の型は Map<String, ?>)
    Map<String, ?> allEntries = prefs.getAll();

    // 取得したデータをキーで自動ソートするためにTreeMapを使用
    Map<String, String> dataMap = new TreeMap<>();
    
    for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
        // SharedPreferencesの値がString型であることを確認してキャスト
        if (entry.getValue() instanceof String) {
            String key = entry.getKey();
            String value = (String) entry.getValue();
            
            // 返却用のMapに追加
            dataMap.put(key, value);
            // キーのみを保持するリストにも保存(後で特定のデータを操作する場合に便利)
            keysList.add(key);
        }
    }
    return dataMap;
}
 

 

スポンサーリンク

 - Androidプログラミング