如何保存 ImageView 的状态?

问题描述

我正在开发一款游戏。现在我正处于用户可以选择他的卡片并制作一副套牌的时候。

为此,他首先点击了他想在我的片段“DeckKartenFragment”中使用的卡片。在这个例子中,他选择了卡片“radler”。如果他这样做,他会被定向到另一个片段(在底部“RadlerKarte”的示例中),其中显示了有关该卡片的详细信息。

final ImageView radler = (ImageView) v.findViewById(R.id.radlerKlein);
        radler.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager manager = getFragmentManager();
                manager.beginTransaction().replace(R.id.layout_karte,new RadlerKarte()).commit();

            }
        });

在该片段中,用户可以单击按钮“radlerWahl”,将他重定向到“DeckKartenFragment”。 (他选那张牌,他也可以只看细节不选那张牌!)

radlerWahl = v.findViewById(R.id.radlerKarteWahlen);
        final String karteRadler = "Radler";
        radlerWahl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DeckKartenFragment deckKartenFragment = new DeckKartenFragment();
                Bundle radlerAusgewählt = new Bundle();
                radlerAusgewählt.putString("2",karteRadler);
                deckKartenFragment.setArguments(radlerAusgewählt);
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                transaction.replace(R.id.fragment_container,deckKartenFragment);
                transaction.commit();
            }
        });

回到“DeckKartenFragment”,他有 6 个 ImageViews 来放置那张卡片。 “deck1”、“deck2”等: 例如,如果他将该卡片放在“deck1”上,则该卡片的图像(此片段从“RadlerKarte”中的“radlerAusgewählt”捆绑包中获得)将放在“deck1”上。为确保他不会两次选择同一张牌,此操作取决于条件“if (deck.contains(1) == false)”,其中“1”代表这张特定选择的牌(“2”将用于另一张卡片):

deck1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String wertIfCardIsChoosed = "Radler";
                Bundle karteAusgewähltFinal = getArguments();
                final String radlerWert = karteAusgewähltFinal.getString("2");
                if (radlerWert == wertIfCardIsChoosed)
                    if (deck.contains(1) == false){
                        deck1.setBackgroundResource(R.drawable.radler_klein_level_1);
                        deck.add(1);}
                    else {}
                else {

                };}
        });

我有一个 ArrayList“甲板”。里面应该有现在选择的所有卡片(最多可以有6张卡片)。

deck = new ArrayList();

我现在有很多问题:

  1. 当用户离开应用程序时,如何保存 ImageViews“deck1”等的状态?

  2. 应用程序仅使用 1 张卡片就知道 ArrayList“卡片组”中卡片组中有哪些卡片,但是当我添加更多卡片时,我不知道我必须删除哪个操作 - 如果用户替换为例如卡片“radler”——代表卡片的数字(在这个例子中:“1”)和新的,所以只有我的 6 个图像视图“deck1”、“deck2”等中的卡片数组列表“甲板”。

拥有一个实际的代码示例会非常有帮助,因为如果没有我之前得到的示例,我无法理解解决方案......

提前谢谢大家!

(如果有帮助,这里是这两个片段的完整代码) DeckKartenFragment:

package com.example.bottles;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.media.Image;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;

import java.lang.reflect.Array;
import java.util.ArrayList;

import static com.example.bottles.R.drawable.radler_klein_level_1;

public class DeckKartenFragment extends Fragment {

    ImageView deck1;
    ImageView deck2;
    ImageView deck3;
    ImageView deck4;
    ImageView deck5;
    ImageView deck6;
    ArrayList deck;
    SharedPreferences sp;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_standard,container,false);
        final ImageView radler = (ImageView) v.findViewById(R.id.radlerKlein);
        radler.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager manager = getFragmentManager();
                manager.beginTransaction().replace(R.id.layout_karte,new RadlerKarte()).commit();

            }
        });
        deck1 = v.findViewById(R.id.deck_karte_1);
        deck2 = v.findViewById(R.id.deck_karte_2);
        deck3 = v.findViewById(R.id.deck_karte_3);
        deck4 = v.findViewById(R.id.deck_karte_4);
        deck5 = v.findViewById(R.id.deck_karte_5);
        deck6 = v.findViewById(R.id.deck_karte_6);
        deck = new ArrayList();
        sp = this.getActivity().getSharedPreferences("prefImageDeck",Context.MODE_PRIVATE);
        final SharedPreferences.Editor editor = sp.edit();
        deck1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String wertIfCardIsChoosed = "Radler";
                Bundle karteAusgewähltFinal = getArguments();
                final String radlerWert = karteAusgewähltFinal.getString("2");
                if (radlerWert == wertIfCardIsChoosed)
                    if (deck.contains(1) == false){
                        deck1.setBackgroundResource(R.drawable.radler_klein_level_1);
                        deck.add(1);}
                    else {}
                else {

                };}
        });
        deck2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String wertIfCardIsChoosed = "Radler";
                Bundle karteAusgewähltFinal = getArguments();
                final String radlerWert = karteAusgewähltFinal.getString("2");
                if (radlerWert == wertIfCardIsChoosed)
                    if (deck.contains(1) == false){
                        deck2.setBackgroundResource(R.drawable.radler_klein_level_1);
                        deck.add(1);}
                    else {}
                else {

                };}
        });
        deck3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String wertIfCardIsChoosed = "Radler";
                Bundle karteAusgewähltFinal = getArguments();
                final String radlerWert = karteAusgewähltFinal.getString("2");
                if (radlerWert == wertIfCardIsChoosed)
                    if (deck.contains(1) == false){
                        deck3.setBackgroundResource(R.drawable.radler_klein_level_1);
                        deck.add(1);}
                else {

                };}
        });
        deck4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String wertIfCardIsChoosed = "Radler";
                Bundle karteAusgewähltFinal = getArguments();
                final String radlerWert = karteAusgewähltFinal.getString("2");
                if (radlerWert == wertIfCardIsChoosed)
                    if (deck.contains(1) == false){
                        deck4.setBackgroundResource(R.drawable.radler_klein_level_1);
                        deck.add(1);}
                else {

                };}
        });
        deck5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String wertIfCardIsChoosed = "Radler";
                Bundle karteAusgewähltFinal = getArguments();
                final String radlerWert = karteAusgewähltFinal.getString("2");
                if (radlerWert == wertIfCardIsChoosed)
                    if (deck.contains(1) == false){
                        deck5.setBackgroundResource(R.drawable.radler_klein_level_1);
                        deck.add(1);}
                else {

                };}
        });
        deck6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String wertIfCardIsChoosed = "Radler";
                Bundle karteAusgewähltFinal = getArguments();
                final String radlerWert = karteAusgewähltFinal.getString("2");
                if (radlerWert == wertIfCardIsChoosed)
                    if (deck.contains(1) == false){
                        deck6.setBackgroundResource(R.drawable.radler_klein_level_1);
                        deck.add(1);}
                else {

                };}
        });

        return v;


    }

    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putIntegerArrayList("deck",deck);
    }

}

RadlerKarte:

package com.example.bottles;

import android.os.Bundle;

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;

public class RadlerKarte extends Fragment {

    Button radlerWahl;

    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_radler_karte,false);

        radlerWahl = v.findViewById(R.id.radlerKarteWahlen);
        final String karteRadler = "Radler";
        radlerWahl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DeckKartenFragment deckKartenFragment = new DeckKartenFragment();
                Bundle radlerAusgewählt = new Bundle();
                radlerAusgewählt.putString("2",deckKartenFragment);
                transaction.commit();
            }
        });
    return v;
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)