需求:用戶通過 EditText 輸入新項目,動態添加到 strings.xml 的 string-array 中,供多個 Spinner 共享。
res/values/strings.xml 打包進 APK,**運行時不可修改**。Resources 的操作都會失敗或崩潰。// 初始化:從 SP 恢復或默認
Set saved = prefs.getStringSet("planets", new HashSet<>(Arrays.asList("AAA","BBB")));
List planets = new ArrayList<>(saved);
// Spinner 適配器
ArrayAdapter adapter = new ArrayAdapter<>(this,
android.R.layout.simple_spinner_item, planets);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
// 用戶添加
String input = editText.getText().toString().trim();
if (!input.isEmpty() && !planets.contains(input)) {
planets.add(input);
adapter.notifyDataSetChanged();
prefs.edit().putStringSet("planets", new HashSet<>(planets)).apply();
}
@Entity
public class Planet { @PrimaryKey String name; }
@Dao
public interface PlanetDao {
@Query("SELECT * FROM planet") List getAll();
@Insert(onConflict = OnConflictStrategy.IGNORE) void insert(Planet p);
}
// ViewModel + LiveData 驅動 UI 自動更新
File file = new File(getFilesDir(), "planets.json");
// 讀寫 List 為 JSON 數組
將 List 封裝為 **單例 Repository** 或 **ViewModel**,所有 Spinner 共用同一 ArrayAdapter 實例或觀察同一 LiveData。>
notifyDataSetChanged() 即時刷新所有綁定 Spinner。資源文件靜態化,數據動態化,是 Android 開發鐵律。