我正在 Android 中构建一个国家/地区选择器对话框片段,在分段回收器视图中显示国家/地区列表。第一部分显示收藏夹,第二部分显示其余国家/地区。每个条目都显示了国家名称和一颗星星。通过单击星号,该国家/地区将从非最喜欢的部分移动到最喜欢的部分,反之亦然。尽管我找到了一种解决方法,但我想了解 Country 对象列表中持久值的原因。首先,我在一个单独的类中有一个国家对象列表:国家.javapublic class Country {private String mCountryId;private String mName;private int mResourceId;private boolean mIsFavourite;public static final Country[] countries = { new Country("4", "Afghanistan", R.drawable.zafghanistan, false), new Country("8", "Albania", R.drawable.zalbania, false), new Country("12", "Algeria", R.drawable.zalgeria, false), new Country("20", "Andorra", R.drawable.zandorra, false), new Country("24", "Angola", R.drawable.zangola, false), new Country("28", "Antigua and Barbuda", R.drawable.zantigua_and_barbuda, false),};public Country(String countryId, String name, int resourceId, boolean isFavourite) { mCountryId = countryId; mName = name; mResourceId = resourceId; mIsFavourite = isFavourite;}public String getmCountryId () { return mCountryId;}public String getmName() { return mName;}public int getmResourceId() { return mResourceId;}public boolean getmIsFavourite() { return mIsFavourite;}public void setmIsFavourite(boolean mIsFavourite) { this.mIsFavourite = mIsFavourite;}public static List<Country> createCountryList() { List<Country> countriesArrayList = new ArrayList<>(Arrays.asList(countries)); return countriesArrayList;}}country 对象的最后一个值是一个布尔值,用于存储该国家/地区是否受欢迎。我使用这个值来避免不断查询本地数据库。在我的对话片段中,您可以看到我在开头初始化了国家/地区列表,即它获取 Country 类的所有值,这意味着一开始没有一个国家是最喜欢的。后来我用存储在数据库中的收藏夹更新了它,但它工作正常。我不明白的是以下观察结果:假设我有 5 个最喜欢的国家/地区,我通过在片段外部单击来关闭对话框片段。然后我重新打开对话框片段,国家列表应该再次初始化。至少我对 !=null 的检查表明此时 List 尚未初始化。然后初始化countries = Country.createCountryList();再次发生。这意味着所有喜欢的布尔值都应该是假的,就像第一次打开对话框片段一样。然而,那些最受欢迎的国家显示布尔值真!这怎么可能?如果片段将保留成员变量,则国家列表应该已经在我检查时初始化,但事实并非如此。值是否存储在另一个列表或磁盘上?
添加回答
举报
0/150
提交
取消