我想打开一个随机片段。现在我打开它生成一个随机数和一个开关,case 1,case2等,我打开片段1,2等。这些片段是级别,它们的名字是:Nivel1,Nivel2等。
但是如果我使用这种方法,我想要做超过100个级别并且它有很多代码。有没有办法生成随机数,然后如果数字是2显示Nivel2()片段等?
这是我的实际代码:
public class Xtreme extends Activity {
String SiguienteNivel;
static int randomFragmentNum;
static int NivelesTotales=30;
static Random random = new Random();
FragmentManager fragmentManager = getFragmentManager();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xtreme);
randomFragmentNum = random.nextInt(7);
Fragment();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.xtreme, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void Fragment() {
switch (randomFragmentNum) {
case 0: {
fragmentManager.beginTransaction().replace(R.id.container, new Nivel1()).commit();
break;
}
case 1: {
fragmentManager.beginTransaction().replace(R.id.container, new Nivel2()).commit();
break;
}
case 2: {
fragmentManager.beginTransaction().replace(R.id.container, new Nivel3()).commit();
break;
}
case 3: {
fragmentManager.beginTransaction().replace(R.id.container, new Nivel4()).commit();
break;
}
case 4: {
fragmentManager.beginTransaction().replace(R.id.container, new Nivel5()).commit();
break;
}
case 5: {
fragmentManager.beginTransaction().replace(R.id.container, new Nivel6()).commit();
break;
}
case 6: {
fragmentManager.beginTransaction().replace(R.id.container, new Nivel7()).commit();
break;
}
case 7: {
fragmentManager.beginTransaction().replace(R.id.container, new Nivel8()).commit();
break;
}
}
}
}
答案 0 :(得分:5)
您可以按名称创建一个类:
try{
Fragment f = (Fragment)(Class.forName("com.example.Fragment"+i).newInstance());
fragmentManager.beginTransaction().replace(R.id.container,f).commit();
}catch(ClassNotFoundException e){
Log.e("loading level","level class not found",e);
}
答案 1 :(得分:1)
Zielony的回答有助于解决这一特定问题,但作为我想补充的建议。我不知道如何为每个级别创建片段类文件是一个很好的方法。如果你想创造100多个级别,甚至更多。寻找一种让关卡变得动态的方法。如果你不能,你真的确定你会想要创造100个级别的工作吗?或者至少做xml布局,看看所有级别是否都有相同的游戏玩法。如果是这样,那么您可以随机执行,获取关卡布局名称并将其传递给片段,以便使用新布局重新创建它。