【问题标题】:Android random intent with array带有数组的Android随机意图
【发布时间】:2014-04-17 08:35:10
【问题描述】:

您好,我的应用中有一个包含 2000 个问题的测验,我想在单击按钮时启动一个随机意图。但是我的代码不起作用。我不知道它有什么问题。为了更容易在这里显示,我只在数组中放入了 4 个字符串

public void KlickA (View view) {

     final String[] fragen = {"Frage1Activity.class","Frage2Activity.class","Frage3Activity.class","Frage4Activity.class"};
    Button buttonfrag = (Button)findViewById(R.id.fragzufall);
    buttonfrag.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
     int random = (int) (Math.random() *4 );
    Intent intent = new Intent(fragen[random]);
    startActivity(intent);
    }});    
}

【问题讨论】:

  • 怎么不行?
  • 请不要为每个问题都开始一个活动,只需更改您的观点文本。它会让你陷入真正的麻烦。您必须在 Manifest.xml 中声明每个 Activity,您无法进行全局更改等等。对于您的下一个问题,请将您的 logcat 添加到其中!
  • 为什么不启动一个活动,然后随机选择一个问题来显示并在活动的onCreate()中处理该问题的显示?您可以将 Fragment 用于不同类型的问题。
  • 我对每个问题都有一个活动来检查答案是否正确

标签: android android-intent random


【解决方案1】:
final String[] fragen = {"Frage1Activity.class","Frage2Activity.class","Frage3Activity.class","Frage4Activity.class"};

为了你的意图,你必须写这样的东西:

Intent intent = new Intent(MainActivity.this,fragen[random]); // error here !!!

这里有

fragen[random]String 但它必须类似于:

Frage3Activity.class //类不是字符串

不喜欢"Frage3Activity.class"// string


解决方案:

使用:

Class cl = Class.forName(fragen[random]);

然后:

Intent intent = new Intent(MainActivity.this, cl);

最后:

 public void KlickA (View view) {
    final String[] fragen = {"Frage1Activity.class","Frage2Activity.class","Frage3Activity.class","Frage4Activity.class"};
    Button buttonfrag = (Button)findViewById(R.id.fragzufall);
    buttonfrag.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
           int random = (int) (Math.random() *4 );
           Class cl = Class.forName(fragen[random]);
           Intent intent = new Intent(MainActivity.this, cl);
           startActivity(intent);
        }
    });    
}

【讨论】:

    【解决方案2】:

    您是否在 Manifest 中添加了活动名称?

    应该是这样的

    Intent intent = new Intent(MainActivity.this, fragen[random]);
    

    【讨论】:

    • 我试过了,但它给了我错误“构造函数 Intent(new View.OnClickListener(){}, String) 未定义”
    • 给它一个你必须参考活动的更新
    • 是的,活动是在清单中设置的,如果在没有随机按钮的情况下启动它们,它们就可以工作。
    • fragen[random] 是一个字符串 -.-
    【解决方案3】:

    问题在于意图创建。如果您使用字符串创建意图,则意味着您希望使用操作而不是类创建意图。在您的情况下,您想使用显式类(如 Frag1Activity.class)创建意图,您可以尝试使用不同的构造函数创建意图:

    //Create an intent for a specific component.
    Intent(Context packageContext, Class<?> cls) 
    

    例如,以下是我如何使用意图启动 DetailActivity:

    Intent intent = new Intent(this, DetailActivity.class);
    intent.setAction("View");
    intent.putExtra("category", itemSelected.category);
    intent.putExtra("entree_name", itemSelected.name);
    startActivity(intent);
    

    希望对你有帮助。

    【讨论】:

      【解决方案4】:

      你可以像这样创建 Intent 数组:

      Intent[] intentArray = {new Intent(this, Frage1Activity.class), new Intent(this, Frage2Activity.class), 
          new Intent(this, Frage3Activity.class), new Intent(this, Frage4Activity.class)};
      
      
      int random = (int) (Math.random() *4 );
      Intent intent = intentArray[random];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多