Android 如何进行随机活动?
我在做儿童游戏,可以说这是IQ儿童测试,我在10个活动中有问题,然后我希望它是随机的,当用户启动问题时,它将调用10个中的1个,当用户按下下一个问题时,它将调用剩余9个活动中的1个。如果再次按下下一步,它将调用剩余8个活动中的1个 我该怎么做 致以最良好的祝愿Android 如何进行随机活动?,android,Android,我在做儿童游戏,可以说这是IQ儿童测试,我在10个活动中有问题,然后我希望它是随机的,当用户启动问题时,它将调用10个中的1个,当用户按下下一个问题时,它将调用剩余9个活动中的1个。如果再次按下下一步,它将调用剩余8个活动中的1个 我该怎么做 致以最良好的祝愿 创建一个哈希表/映射,其中键为1到10之间的数字,值为活动名称 当用户按下下一步-生成一个介于1和10之间的随机数 使用随机生成的数字作为键并查找活动名称。如果找不到随机数作为密钥,则再次生成随机数并重复步骤3 使用活动名称调用开始
你真的需要10项活动吗?IMHO->否 你只需要保留一项活动,基于此,你可能会有 不同测验的不同屏幕设计,然后您可以创建 基于特定数字的随机选择的各种布局 现在的问题是,我如何得到这个随机数 假设你有10个不同的测验,最终可能会增加,因此你可以使用一个好的
数据结构
或集合
。对于您的用例,我将推荐一个HashMaps
的Arraylist
Arraylist count将告诉您有多少个测试,Hashmap将由问题编号组成,因为
key
和value
将包含其他数据。它可能没有得到足够的优化,但对您来说只是一个尝试。我为三个活动创建了一个演示,您可以自定义多达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" />
ThreeActivity.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);
}
}
}
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;
}
}
}
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;
}
}
}
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
对我来说似乎是个糟糕的设计。1-9问题应能在一个活动中显示。意味着活动应该更可重用,并且问题应该在活动的占位符中可替换。堆栈交换是为了帮助您成为一名更好的程序员,而不是为您编写代码。首先查找1-10之间的随机数。此随机数存储在数组中。然后单击“下一步”按钮从数组中提取数字并开始相关活动。给布局名称一、二、三。。。在活动名称“一个活动,两个活动…”上,然后轻松管理。您的答案建议如果有500个问题,您应该创建500个活动。@Rudy我不建议创建500个活动。我给出了问题的答案。
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;
}
}
}
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;
}
}
}
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;
}
}
}
<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>