我正在做儿童游戏,可以说它是智商儿童测试,我在 10 个活动中有问题,然后我希望它是随机的,当用户启动问题时,它将调用 1 of 10,当用户按下下一个问题时,它将调用 1 of 9 活动剩余。,如果再次按下一步,它将调用剩余 8 个活动中的 1 个。
我怎样才能做到这一点?
此致,
我正在做儿童游戏,可以说它是智商儿童测试,我在 10 个活动中有问题,然后我希望它是随机的,当用户启动问题时,它将调用 1 of 10,当用户按下下一个问题时,它将调用 1 of 9 活动剩余。,如果再次按下一步,它将调用剩余 8 个活动中的 1 个。
我怎样才能做到这一点?
此致,
我为三个活动创建了一个演示,您可以自定义多达 50 个活动。
activity_main.xml
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="main" />
<Button
android:id="@+id/btn_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="Next" />
<Button
android:id="@+id/btn_random"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginLeft="29dp"
android:layout_marginTop="70dp"
android:text="Random" />
一个.xml
<TextView
android:id="@+id/btn_random"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="74dp"
android:layout_marginTop="26dp"
android:text="One" />
二.xml
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="74dp"
android:layout_marginTop="26dp"
android:text="Two" />
<Button
android:id="@+id/btn_random"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="Next" />
三.xml
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="74dp"
android:layout_marginTop="26dp"
android:text="Three" />
<Button
android:id="@+id/btn_random"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Next" />
MainActivity.java
public class MainActivity extends Activity implements OnClickListener {
public static List<Integer> numberList =new ArrayList<Integer>();
private Button btn_Random,btn_Next;
public static int countNext=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// set resources
btn_Random =(Button) findViewById(R.id.btn_random);
btn_Next =(Button) findViewById(R.id.btn_next);
btn_Random.setOnClickListener(this);
btn_Next.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_random:
findRandom();
break;
case R.id.btn_next:
countNext=0;
System.out.println("first value of array:"+numberList.get(countNext));
if(numberList.get(countNext)==1){
countNext++;
startActivity(new Intent(MainActivity.this,OneActivity.class));
}else if (numberList.get(countNext) == 2) {
countNext++;
startActivity(new Intent(MainActivity.this,TwoActivity.class));
}else if (numberList.get(countNext) ==3) {
countNext++;
startActivity(new Intent(MainActivity.this,ThreeActivity.class));
}
break;
default:
break;
}
}
private void findRandom() {
numberList.clear();
for(int i=0;i<3;i++){
numberList.add(i+1);
}
long seed = System.nanoTime();
Collections.shuffle(numberList, new Random(seed));
Collections.shuffle(numberList, new Random(seed));
for (int no : numberList) {
System.out.println("random number:"+no);
}
}
}
OneActivity.java
package com.project.ques;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class OneActivity extends Activity implements OnClickListener{
public static List<Integer> numberList =new ArrayList<Integer>();
private Button btn_Random;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one);
// set resources
btn_Random =(Button) findViewById(R.id.btn_random);
btn_Random.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_random:
System.out.println("first value of array:"+MainActivity.numberList.get(MainActivity.countNext));
if(MainActivity.numberList.get(MainActivity.countNext)==1){
MainActivity.countNext++;
startActivity(new Intent(OneActivity.this,OneActivity.class));
}else if (MainActivity.numberList.get(MainActivity.countNext) == 2) {
MainActivity.countNext++;
startActivity(new Intent(OneActivity.this,TwoActivity.class));
}else if (MainActivity.numberList.get(MainActivity.countNext) ==3) {
MainActivity.countNext++;
startActivity(new Intent(OneActivity.this,ThreeActivity.class));
}
break;
default:
break;
}
}
}
TwoActivity.java
package com.project.ques;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class TwoActivity extends Activity implements OnClickListener{
private Button btn_Random;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.two);
// set resources
btn_Random =(Button) findViewById(R.id.btn_random);
btn_Random.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_random:
System.out.println("first value of array:"+MainActivity.numberList.get(MainActivity.countNext));
if(MainActivity.numberList.get(MainActivity.countNext)==1){
MainActivity.countNext++;
startActivity(new Intent(TwoActivity.this,OneActivity.class));
}else if (MainActivity.numberList.get(MainActivity.countNext) == 2) {
MainActivity.countNext++;
startActivity(new Intent(TwoActivity.this,TwoActivity.class));
}else if (MainActivity.numberList.get(MainActivity.countNext) ==3) {
MainActivity.countNext++;
startActivity(new Intent(TwoActivity.this,ThreeActivity.class));
}
break;
default:
break;
}
}
}
ThreeActivity.java
package com.project.ques;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ThreeActivity extends Activity implements OnClickListener{
private Button btn_Random;
public static int countNext=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.three);
// set resources
btn_Random =(Button) findViewById(R.id.btn_random);
btn_Random.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_random:
System.out.println("first value of array:"+MainActivity.numberList.get(countNext));
if(MainActivity.numberList.get(countNext)==1){
MainActivity.countNext++;
startActivity(new Intent(ThreeActivity.this,OneActivity.class));
}else if (MainActivity.numberList.get(countNext) == 2) {
MainActivity.countNext++;
startActivity(new Intent(ThreeActivity.this,TwoActivity.class));
}else if (MainActivity.numberList.get(countNext) ==3) {
MainActivity.countNext++;
startActivity(new Intent(ThreeActivity.this,ThreeActivity.class));
}
countNext++;
break;
default:
break;
}
}
}
AndroidManifest.xml
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.project.ques.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="OneActivity"></activity>
<activity android:name="TwoActivity"></activity>
<activity android:name="ThreeActivity"></activity>
</application>
创建一个哈希表/映射,键为 1 到 10 的数字,值作为活动名称。
当用户按下下一个 - 生成一个介于 1 和 10 之间的随机数。
使用随机生成的数字作为 key 并找到活动名称。如果没有找到随机数作为密钥 - 再次生成随机数并重复步骤 3。
使用活动名称调用启动活动。
此外,每次您在开始活动中使用键/活动时 - 将其从哈希表中删除。
这可能是解决方案之一,尽管我相信人们会想出更好的解决方案。
创建一个数组,只需将值放入
array[0] = 1 // 表示 array[0] 是问题 1
数组[1] = 2
数组[9] = 10
重新洗牌(把它想象成重新洗牌)
选择 2 个不同的索引
int index_a = Random.nextInt(10);
int index_b = Random.nextInt(10);
创建一个按钮,单击它将替换同一活动中的问题。
注意:不要为每个问题创建一个活动!
你真的需要10个活动吗?恕我直言->否
您只需保留一个 Activity 并基于此显然您可能对不同的测验有不同的屏幕设计,然后您可以根据特定数字的随机选择创建各种布局。
现在问题变成了,我如何得到这个随机数。
假设您有 10 个不同的测验,这些测验最终可能会增加,因此您可能会使用一个好的Data Structure
或Collection
. 对于您的用例,我会推荐一个Arraylist
.HashMaps
Arraylist count 会告诉有多少测试,而 Hashmap 将包含问题编号,key
并将value
包含其他数据。它可能没有足够优化,但它只是适合你。