我用这个序列设计的应用程序:集SharedPreferences动态命名
(本类不会改变,我会使用他们的多项活动)
- 定义适配器
- 模型类
- 共享偏好
而且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);
}
只需将'Name'添加到您的自定义适配器,稍后将该'Name'路由到共享首选项。 – Dusan