#android
#Android
Вопрос:
У меня есть два разных стиля изображений карточек. У каждого есть шесть разных карт. Когда я нажимаю кнопку на верхней боковой панели, приложение изменяет изображения карт. и как только я изменю изображение карты, я хочу сохранить его до повторного изменения. Я использую sharePreferences. Я думаю, что мой код должен работать, но я не знаю, где я сделал это неправильно. Кто-нибудь может мне помочь с этим? Заранее благодарю вас.
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();
}
}
Комментарии:
1. Достаточно всего одного экземпляра
SharePreferences
. В любом случае, где вы сохраняете свои изображения / состояния? Я ничего не вижу.2. Спасибо за вашу помощь! Я очень новичок в программировании, так куда же мне поместить один экземпляр sharePreferences. и как создать единственный экземпляр sharePreferenes. Изображения доступны для рисования.
Ответ №1:
Вы должны использовать один экземпляр 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);
Вы можете использовать специальный класс настроек, чтобы уменьшить беспорядок.
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();
Комментарии:
1. Спасибо за вашу помощь!! но проблема в том, что я не могу сохранить изображение карты даже после использования другого действия…. Я не знаю, как использовать ваш код. есть ли какой-либо способ использовать мой код для достижения этой цели?
2. Вы правильно используете настройки для своей цели, но ваша реализация неверна, поэтому вам следует исправить реализацию. Я должен написать ваш код для вас, чтобы помочь вам дальше, чем мой ответ.
3. Спасибо за вашу помощь! Я ценю это!
4. Спасибо за вашу помощь. Я пытаюсь добавить код в метод onResume. но я не знаю как. Не могли бы вы дать мне некоторую идею по этому поводу? Спасибо.