问题描述
我正在开发一款游戏。现在我正处于用户可以选择他的卡片并制作一副套牌的时候。
为此,他首先点击了他想在我的片段“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();
我现在有很多问题:
-
当用户离开应用程序时,如何保存 ImageViews“deck1”等的状态?
-
应用程序仅使用 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 (将#修改为@)