【发布时间】:2016-10-01 20:50:17
【问题描述】:
我有一个包含许多不同活动的游戏。它从主菜单开始,然后 Q1、Q2 和 Q3 是 3 个包含内容的独立活动。我知道如何在活动之间随机播放,但总是有重复,因为我有大约 30 个活动。我一直在寻找和寻找,最后决定问你们。阅读有关捆绑包的信息,但我自己无法弄清楚。我真是个菜鸟。除非我能看到我卡住的代码。我自己尝试了很多不同的方式,但我认为所有这些都是无稽之谈。 所以基本上当它洗牌时,它应该去 Q1 然后 Q3 然后 Q4。 相反,因为它重复它有可能进入 Q1 然后 Q3 然后 Q1 再次,这对我的游戏来说是灾难性的。如果可能,请提供更详细的编码。我知道我很烦人,但我不认识村里的其他程序员。
MainMenu.java
public class MainMenu extends AppCompatActivity {
final ArrayList<Class> activities = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainmenu);
activities.add(Q1.class);
activities.add(Q2.class);
activities.add(Q3.class);
}
public void onHintClick(View view) {
Toast toasty = Toast.makeText(getApplicationContext(), getString(R.string.H1), Toast.LENGTH_SHORT);
toasty.show();
}
public void onAnswerClick(View v){
if (activities.size()==0){
activities.add(Q1.class);
activities.add(Q2.class);
activities.add(Q3.class);
}
Collections.shuffle(activities);
Class activityToShow = activities.get(0);
Intent intent = new Intent(MainMenu.this, activityToShow);
activities.remove(0);
startActivity(intent);
}
}
Q1.java
public class Q1 extends AppCompatActivity {
final ArrayList<Class> activities = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_q1);
final ArrayList<Class> activities = new ArrayList<>();
activities.add(Q2.class);
activities.add(Q3.class);
}
public void button(View view){
if (activities.size()==0){
activities.add(Q2.class);
activities.add(Q3.class);
}
Collections.shuffle(activities);
Class activityToShow = activities.get(0);
Intent intent = new Intent(Q1.this, activityToShow);
activities.remove(0);
startActivity(intent);
}
}
以及 Q2 和 Q3 的类似代码.....我需要知道的是,现在如何使这些页面重复。请以最简单的方式告诉我,因为我真的是我的菜鸟。 提前致谢!
Android 清单
package="com.test.cross">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:name=".MyApplication"
android:theme="@style/AppTheme">
<activity android:name=".MainMenu">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Q1" />
<activity android:name=".Q2" />
<activity android:name=".Q3">
</activity>
</application>
</manifest>
我的错误
FATAL EXCEPTION: main
Process: com.test.cross, PID: 2793
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at com.test.cross.ActivityList.getRandomActivity(ActivityList.java:46)
at com.test.cross.MainMenu.onAnswerClick(MainMenu.java:40)
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
【问题讨论】:
-
如果我错了,请纠正我,我理解您的帖子的方式是,您不希望每次返回时都重新创建您的活动?
-
感谢您抽出宝贵时间发表评论。我不希望我的活动不断重复。我希望他们随机开始,但不要重复两次相同的活动,直到游戏结束再次回到主菜单。希望你能理解。
-
我明白了。所以每个活动都只能经历一次?为什么不只是有一个活动所在的列表或集合,然后每次启动该活动时,都可以从该列表/集合中删除该活动?
标签: android android-intent android-activity random shuffle