我正在使用这个序列来设计一个应用程序:
(This类不会改变,我将使用它们进行多个活动)
1.自定义适配器
1.模型类
1.共享首选项
和Activity
与选项卡布局(有两个片段),其中包含:
我给它命名为:(套餐#1)
- MainActivity
- 第一章碎片
- 第一百二十二章碎片二
现在我想复制 * 包#1*,并更改一些内容,然后将其命名为包#2。但我有个问题。
我正在为包#1、包#2、包#3.使用一个共享首选项,对吗?请查看我的共享偏好类:
public class SharedPreference_light {
private SharedPreferences settings;
private SharedPreferences.Editor editor;
private Gson gson = new Gson();
private static final String PREFS_NAME = "Light_Products";
private static final String FAVORITES = "Favorite_Tones_Light";
public SharedPreference_light(Context context) {
settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
editor = settings.edit();
}
private void saveFavorites(List<ProductLocal> favorites) {
String jsonFavorites = gson.toJson(favorites);
editor.putString(FAVORITES, jsonFavorites);
editor.apply();
}
public void addFavorite(ProductLocal product) {
List <ProductLocal> favorites = getFavorites();
if (favorites == null)
favorites = new ArrayList<>();
favorites.add(product);
saveFavorites(favorites);
}
public void removeFavorite(ProductLocal product) {
ArrayList <ProductLocal> favorites = getFavorites();
if (favorites != null) {
favorites.remove(product);
saveFavorites(favorites);
}
}
public ArrayList <ProductLocal> getFavorites() {
List<ProductLocal> favorites;
if (settings.contains(FAVORITES)) {
String jsonFavorites = settings.getString(FAVORITES, null);
ProductLocal[] favoriteItems = gson.fromJson(jsonFavorites, ProductLocal[].class);
favorites = Arrays.asList(favoriteItems);
favorites = new ArrayList <> (favorites);
} else
return null;
return (ArrayList <ProductLocal> ) favorites;
}
}
问题是如果我使用这两个 * 变量 *:
private static final String PREFS_NAME = "Light_Products";
private static final String FAVORITES = "Favorite_Tones_Light";
这些包之间会有冲突。因为我将在共享首选项中添加一些列表项,并使用getSharedPreferences
。那么所有这些项目从多个软件包将被添加到一个共享的首选项,我不希望这样。
我真实的问题是:
如何动态设置共享首选项名称(* 变量**)?
**注意:**我在自定义适配器中有一个共享首选项的用法:
private boolean checkFavoriteItem(ProductLocal checkProduct) {
boolean check = false;
List<ProductLocal> favorites = sharedPreference.getFavorites();
if (favorites != null) {
for (ProductLocal product : favorites) {
if (product.equals(checkProduct)) {
check = true;
break;
}
}
}
return check;
}
适配器:
public class LocalAdapter extends RecyclerView.Adapter<LocalAdapter.MyViewHolder>{
private SharedPreference_light sharedPreference;
public LocalAdapter(Activity activity, List<ProductLocal> dataList, RelativeLayout snackLayout) {
this.snackLayout=snackLayout;
this.activity = activity;
this.dataList = dataList ;
this.dataListFilter = dataList ;
sharedPreference = new SharedPreference_light(activity);
methods = new Methods(activity);
}
2条答案
按热度按时间sxissh061#
首先,你想使用一个接口提供软件包名称:
其次,你可以重用你的类,让它实现前面的接口,但使它抽象:
特别要注意一些已经改变的可见性修改器。最后在你的包中扩展这个抽象类:
以及:
示例化这两个类会得到以下日志:
关于适配器,我认为你应该在构造时指定共享首选项对象:
所以你可以在包#1中初始化你的适配器:
您可以在第二个包中使用SharedPreference_package2进行调整。
希望这对你有帮助。
qaxu7uf22#
Make your all方法将shared preferences key作为参数,如: