android - 如何使 setBackgroundResource 使用 SharedPreferences 保存图像
问题描述
我有两种不同风格的卡片图像。每一张都有六张不同的卡片。当我单击上侧栏上的按钮时,应用程序会更改卡片图像。一旦我更改了卡片图像,我想保留它,直到我重新更改它。我正在使用共享首选项。我认为我的代码应该可以工作,但我不知道我在哪里做错了。谁能帮我这个?先感谢您。
public class CardFragment extends Fragment {
private int num = 0;
private final int RANDOM_NUM = 0;
private int cardNum1, cardNum2, cardNum3, cardNum4, cardNum5, cardNum6;
private ImageView view1, view2, view3, view4, view5, view6;
private Statement stmt2;
private ResultSet rs, rs2;
private Bible bible;
private String categoryName;
// private InterstitialAd mInterstitialAd;
private SharedPreferences imageDialog;
private SharedPreferences imageChange;
private SharedPreferences imageCard1, imageCard2, imageCard3, imageCard4, imageCard5, imageCard6;
private int cardee1, cardee2, cardee3, cardee4, cardee5, cardee6, carde1, carde2, carde3, carde4, carde5, carde6;
public static final int REQUEST_CODE = 101;
@SuppressLint("SourceLockedOrientationActivity")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_card, container, false);
view1 = view.findViewById(R.id.card1);
view1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// displayInterstitial();
//Toast.makeText(context, cardNum1, Toast.LENGTH_SHORT).show();
Log.d("cardNum1", String.valueOf(cardNum1));
drawCard(cardNum1);
}
});
view2 = view.findViewById(R.id.card2);
view2.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(getContext(), cardNum1, Toast.LENGTH_SHORT).show();
Log.d("cardNum2", String.valueOf(cardNum2));
drawCard(cardNum2);
}
});
view3 = view.findViewById(R.id.card3);
view3.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(getContext(), cardNum1, Toast.LENGTH_SHORT).show();
Log.d("cardNum3", String.valueOf(cardNum3));
drawCard(cardNum3);
}
});
view4 = view.findViewById(R.id.card4);
view4.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(getContext(), cardNum1, Toast.LENGTH_SHORT).show();
Log.d("cardNum4", String.valueOf(cardNum4));
drawCard(cardNum4);
}
});
view5 = view.findViewById(R.id.card5);
view5.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(getContext(), cardNum1, Toast.LENGTH_SHORT).show();
Log.d("cardNum5", String.valueOf(cardNum5));
drawCard(cardNum5);
}
});
view6 = view.findViewById(R.id.card6);
view6.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(getContext(), cardNum1, Toast.LENGTH_SHORT).show();
Log.d("cardNum6", String.valueOf(cardNum6));
drawCard(cardNum6);
}
});
setHasOptionsMenu(true);
return view;
}
public void drawCard(int num) {
Log.d("card", "card");
Log.d("num", num + "");
/*String dbName = "bible.db";
Connection conn = Utiles.dbConnection();*/
MyDatabaseHelper db = new MyDatabaseHelper(getActivity());
Cursor cursor = db.readCardData(num);
cursor.moveToFirst();
bible = new Bible();
Log.d("cursorid", String.valueOf(cursor.getInt(0)));
bible.setId(cursor.getInt(0));
bible.setVerse(cursor.getString(1));
bible.setContent(cursor.getString(2));
bible.setNum(cursor.getInt(3));
bible.setCnum(cursor.getInt(4));
bible.setVnum(cursor.getInt(5));
bible.setImagenum(cursor.getInt(6));
bible.setTimestamp(cursor.getString(7));
Log.d("content", bible.getContent());
Log.d("bible.getCnum", String.valueOf(bible.getCnum()));
Cursor cursor1 = db.getCategoryName(bible.getCnum());
cursor1.moveToFirst();
categoryName = cursor1.getString(0);
Log.d("!!!!!bible", bible.toString());
Intent intent = new Intent(getActivity(), VerseActivity.class);
// intent.putExtra("cardBible", bible);
intent.putExtra("cardBible", bible);
intent.putExtra("cName", categoryName);
startActivity(intent);
}
@Override
public void onResume() {
super.onResume();
int[] cardNumArray = new int[6];
Map<Integer, Integer> map = new HashMap<>();
ArrayList<Integer> cardNumList = new ArrayList<>();
cardNumList.clear();
map.clear();
while (true) {
num = (int) (Math.random() * 212) + 1;
map.put(num, num);
if (map.size() > 5) {
// Log.d("Test", "Test");
break;
}
}
Set<Integer> key = map.keySet();
for (int c : key) {
cardNumList.add(c);
}
for (int i = 0; i < cardNumList.size(); i++) {
Log.d("Number!!!!!", String.valueOf(cardNumList.size()));
cardNumArray[i] = cardNumList.get(i);
Log.d("cardIndex[" + i + "]", String.valueOf(cardNumArray[i]));
}
cardNum1 = cardNumArray[0];
cardNum2 = cardNumArray[1];
cardNum3 = cardNumArray[2];
cardNum4 = cardNumArray[3];
cardNum5 = cardNumArray[4];
cardNum6 = cardNumArray[5];
imageCard1 = this.getActivity().getSharedPreferences("imageCard1", Context.MODE_PRIVATE);
imageCard2 = this.getActivity().getSharedPreferences("imageCard2", Context.MODE_PRIVATE);
imageCard3 = this.getActivity().getSharedPreferences("imageCard3", Context.MODE_PRIVATE);
imageCard4 = this.getActivity().getSharedPreferences("imageCard4", Context.MODE_PRIVATE);
imageCard5 = this.getActivity().getSharedPreferences("imageCard5", Context.MODE_PRIVATE);
imageCard6 = this.getActivity().getSharedPreferences("imageCard6", Context.MODE_PRIVATE);
}
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
inflater.inflate(R.menu.settings_actions, menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.setting:
imageDialog = this.getActivity().getSharedPreferences("imageDialog", Context.MODE_PRIVATE);
boolean imageD = imageDialog.getBoolean("imageDialog", true);
imageChange = this.getActivity().getSharedPreferences("imageChange", Context.MODE_PRIVATE);
boolean imageChg = imageChange.getBoolean("imageChange", true);
if (imageD) {
imageChDialogPopup(imageChg);
} else {
if (imageChg) {
cardee1 = imageCard1.getInt("cardee1", R.drawable.cardee1);
cardee2 = imageCard2.getInt("cardee2", R.drawable.cardee2);
cardee3 = imageCard3.getInt("cardee3", R.drawable.cardee3);
cardee4 = imageCard4.getInt("cardee4", R.drawable.cardee4);
cardee5 = imageCard5.getInt("cardee5", R.drawable.cardee5);
cardee6 = imageCard6.getInt("cardee6", R.drawable.cardee6);
view1.setBackgroundResource(cardee1);
view2.setBackgroundResource(cardee2);
view3.setBackgroundResource(cardee3);
view4.setBackgroundResource(cardee4);
view5.setBackgroundResource(cardee5);
view6.setBackgroundResource(cardee6);
SharedPreferences.Editor editor = imageChange.edit();
editor.putBoolean("imageChange", false);
editor.commit();
} else {
carde1 = imageCard1.getInt("cardee1", R.drawable.carde1);
carde2 = imageCard2.getInt("cardee2", R.drawable.carde2);
carde3 = imageCard3.getInt("cardee3", R.drawable.carde3);
carde4 = imageCard4.getInt("cardee4", R.drawable.carde4);
carde5 = imageCard5.getInt("cardee5", R.drawable.carde5);
carde6 = imageCard6.getInt("cardee6", R.drawable.carde6);
view1.setBackgroundResource(carde1);
view2.setBackgroundResource(carde2);
view3.setBackgroundResource(carde3);
view4.setBackgroundResource(carde4);
view5.setBackgroundResource(carde5);
view6.setBackgroundResource(carde6);
SharedPreferences.Editor editor = imageChange.edit();
editor.putBoolean("imageChange", true);
editor.commit();
}
}
return true;
}
return super.onOptionsItemSelected(item);
}
private void imageChDialogPopup(final boolean imageChg) {
final AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), R.style.AlertDialogCustom);
builder.setTitle("Changing Card Theme");
builder.setMessage("If you select this button, the cards will be changed.");
builder.setPositiveButton("Change",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (imageChg) {
cardee1 = imageCard1.getInt("cardee1", R.drawable.cardee1);
cardee2 = imageCard2.getInt("cardee2", R.drawable.cardee2);
cardee3 = imageCard3.getInt("cardee3", R.drawable.cardee3);
cardee4 = imageCard4.getInt("cardee4", R.drawable.cardee4);
cardee5 = imageCard5.getInt("cardee5", R.drawable.cardee5);
cardee6 = imageCard6.getInt("cardee6", R.drawable.cardee6);
view1.setBackgroundResource(cardee1);
view2.setBackgroundResource(cardee2);
view3.setBackgroundResource(cardee3);
view4.setBackgroundResource(cardee4);
view5.setBackgroundResource(cardee5);
view6.setBackgroundResource(cardee6);
SharedPreferences.Editor editor = imageChange.edit();
editor.putBoolean("imageChange", false);
editor.commit();
} else {
carde1 = imageCard1.getInt("cardee1", R.drawable.carde1);
carde2 = imageCard2.getInt("cardee2", R.drawable.carde2);
carde3 = imageCard3.getInt("cardee3", R.drawable.carde3);
carde4 = imageCard4.getInt("cardee4", R.drawable.carde4);
carde5 = imageCard5.getInt("cardee5", R.drawable.carde5);
carde6 = imageCard6.getInt("cardee6", R.drawable.carde6);
view1.setBackgroundResource(carde1);
view2.setBackgroundResource(carde2);
view3.setBackgroundResource(carde3);
view4.setBackgroundResource(carde4);
view5.setBackgroundResource(carde5);
view6.setBackgroundResource(carde6);
SharedPreferences.Editor editor = imageChange.edit();
editor.putBoolean("imageChange", true);
editor.commit();
}
}
});
builder.setNegativeButton("Don\'t show this message, again.",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
SharedPreferences.Editor editor = imageDialog.edit();
editor.putBoolean("imageDialog", false);
editor.commit();
Toast.makeText(getContext(), "You select \'Don\'t show this message, again.\'", Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
}
解决方案
您应该在片段上使用单个 SharedPreferences 实例。
SharedPreferences preferences = context.getSharedPreferences(MY_SHARED_PREF_ID,Context.MODE_PRIVATE);
使用不同的键将数据保存到该实例。
preferences.edit().putInt(IMAGE_CARD_1_KEY,R.drawable.cardee1).apply();
preferences.edit().putInt(IMAGE_CARD_2_KEY,R.drawable.cardee2).apply();
使用相同的密钥获取您的数据。
int cardee1 = preferences.getInt(IMAGE_CARD_1_KEY,0);
您可以使用专用的 Preferences 类来减少混乱。
public class Preferences {
private static Preferences instance;
private SharedPreferences preferences;
private final String MY_SHARED_PREF_ID = "a shared pref name";
private final String KEY_IMAGE_1 = "keyImage1";
public static Preferences getInstance(Context context) {
if (instance == null)
instance = new Preferences();
instance.init(context);
return instance;
}
private Preferences() {
}
private void init(Context context) {
preferences = context.getSharedPreferences(MY_SHARED_PREF_ID, Context.MODE_PRIVATE);
}
public String getImage1() {
return preferences.getInt(KEY_IMAGE_1, 0);
}
public void setImage1(int img1) {
preferences.edit().putInt(KEY_IMAGE_1, img1).apply();
}
}
在任何片段/活动/服务中
Preferences preferences = Preferences.getInstance(context);
int image1 = preferences.getImage1();
推荐阅读
- php - 准备好的语句中的mysql语法错误或无效的参数号pdo
- image - 如何从drawable设置ImageBitmap?[科特林]
- c++ - C ++递归导致段错误?
- c# - C#模板函数的想法
- r - 在 R 中的列之间应用用户定义的函数
- c - 如何使用 scanf 获取特定格式的用户输入?
- c++ - Aws::S3::S3Client::S3Client useVirtualAddressing 参数有什么作用?
- jquery - 根据表中存在的值在表中显示图标
- node.js - 如何修复 ORA-06550 调用
- c# - 我没有在数据网格视图上看到任何数据。Localdb 没有发送任何数据(北风)