2011-04-24 33 views
0

向所有帮助我解决其他问题的人表示感谢。我几乎拥有它,但最后的两个问题阻止它按我想要的方式工作。阵列列表正确传输并为每个阵列列表成员设置分数

这2个班级应该做如下。第一类获得想要玩游戏的人的姓名。使用相同的EditText,当他们输入他们的名字时,他们点击提交。当提交所有的名字时,他们点击完成/播放按钮,将他们和他们的数据(有多少名球员和名字)发送到下一堂课。在第一课我相信错误在于提交按钮。我试图将所有名称添加到数组列表中,我不相信它正确地做到了。当我运行这个应用程序时,从用户的角度来看,它的名字很好。但是在下面的屏幕上,它应该显示他们的名字:(它说空,所以它没有正确地得到名字)和一个要做的事(它正确地)。

它需要做的最后一件事是在类2上它需要允许那些按钮(失败,冠军和不坏)只需要点击一次(然后它设置一个分数到人的名字把它变成)然后它需要开始下一个人和任务。 (它没有atm)。我真的很感谢帮助让这件事情发挥作用。感谢所有花时间回复的人。如果你不愿意看到我的求助请求,很抱歉。

1类

public class Class1 extends Activity 
{ 
    int players=0, i=0; 
    String names[]; 

    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.class1); 

     final EditText input = (EditText) findViewById(R.id.nameinput); 

     final ArrayList<String> names = new ArrayList<String>(); 
     //names = new String[players]; 

     Button submitButton = (Button) findViewById(R.id.submit_btn); 
     submitButton.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View submit1) 
      { 
       //for(i=i; i < players; i++) 
       //{ 
        players++; 
        names.add(input.getText().toString()); 
        //names[i] = input.getText().toString(); 
        input.setText(""); 
       //} 
      } 
     }); 

     Button doneButton = (Button) findViewById(R.id.done_btn); 
     doneButton.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View done1) 
      { 
       Intent done = new Intent(Class1.this, Game.class); 
       Bundle bundle = new Bundle(); 
       bundle.putStringArrayList("arrayKey", names); 

       done.putExtra("players", players); 
       //done.putExtra("names", names[players]); 
       startActivity(done); 
      } 
     }); 
    } 

游戏类

public class Game extends Activity 
{ 
    int players, counter=0, score, ptasks,rindex; 
    String[] names; 
    String[] tasks; 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.game); 

     Bundle bundle = this.getIntent().getExtras(); 
     String[] names = bundle.getStringArray("arrayKey"); 

     Intent game = getIntent(); 
     players = game.getIntExtra("players", 1); 
     //names = game.getStringArrayExtra("names"); 

     Random generator = new Random(); 

     tasks = new String[10]; 
     tasks[0]= ""; 
     tasks[1]= ""; 
     tasks[2]= ""; 
     tasks[3]= ""; 
     tasks[4]= ""; 
     tasks[5]= ""; 
     tasks[6]= ""; 
     tasks[7]= ""; 
     tasks[8]= ""; 
     tasks[9]= ""; 

     names = new String[players]; 

     while (counter <5) 
     { 
      for (int i = 0; i < players; i++) 
      { 
       TextView name1 = (TextView) findViewById(R.id.pname); 
       name1.setText(names[i]+":"); 

       ptasks = 10; 
       rindex = generator.nextInt(ptasks); 

       TextView task = (TextView) findViewById(R.id.task); 
       task.setText(tasks[rindex]); 

       Button failButton = (Button) findViewById(R.id.fail_btn); 
       failButton.setOnClickListener(new View.OnClickListener() 
       { 
        public void onClick(View failed) 
        { 
         return; 
        } 
       }); 

       Button notButton = (Button) findViewById(R.id.notbad_btn); 
       notButton.setOnClickListener(new View.OnClickListener() 
       { 
        public void onClick(View notbad) 
        { 
         return; 
        } 
       }); 

       Button champButton = (Button) findViewById(R.id.champ_btn); 
       champButton.setOnClickListener(new View.OnClickListener() 
       { 
        public void onClick(View champp) 
        { 
         return; 
        } 
       }); 

      } 

      counter++; 
     } 
    } 
} 

作为附带说明。您在那些在他们旁边有//注释的部分中看到的内容我在那里,因为我正在测试这些内容和那些未被注释并且都没有工作的内容。如果你有任何关于修复这个问题的意见,我很感激。

+0

你也应该回到你刚才的问题和在适当的地方选择答案并对答案有用/有用的用户投票。这是一个简单的手势和基本的礼貌,这将使人们继续帮助你:) – 2011-04-25 04:36:40

回答

0

我看到两个问题与您的代码,为什么你在为你的球员列表中null这或许可以解释你的第二个Activity

  1. GameString[] names = bundle.getStringArray("arrayKey");

    ArrayList<String> names = bundle.getStringArrayList("arrayKey");` 
    
  2. Class1,您将ArrayList放入Bundlebundle.putStringArrayList("arrayKey", names);),这是从开始没有意义的不在哪里。你应该把它变成了Intent来代替:

    done.putStringListExtra("arrayKey", names); 
    

请注意,你的代码是更加令人困惑,因为你同时拥有String []名为namesArrayList命名names在不同的范围。决定一个(我建议List)并摆脱其他。

此外,在Game,这是unncessary:

Bundle bundle = this.getIntent().getExtras(); 
String[] names = bundle.getStringArray("arrayKey"); 

Intent game = getIntent(); 
players = game.getIntExtra("players", 1); 

你已经有bundle在此之前只是,这样你就可以如做:

Bundle bundle = this.getIntent().getExtras(); 
String[] names = bundle.getStringArray("arrayKey"); 
players = bundle.getInt("players", 1); 

的基本概念是从呼叫活动,您使用各种putExtra()putExtraXXX()方法将信息放入Intent。在称为活动中,你得到的要么

  • 让你放Intent的信息Bundle *从*通过getExtras()Intent,然后把头发在使用上的各种get()方法的一切Bundle不是Intent)。
  • 直接在Intent上调用getExtraXXX()方法。

对于第二部分,因为你的代码目前维持,它只是要遍历马上所有的球员(5次的一切,我不明白的counter目的)。

只有当按下其中一个按钮时,您应该执行的所有处理(计算当前播放器的分数,递增播放器索引的值,设置下一个任务等)。如果这将是一项长期的任务,那么您可以禁用按钮直至完成,以强制每个玩家只允许按下一个按钮。当下一个玩家准备就绪时重新启用按钮。

我没有精力去生产出你所需要的一切,但在一个起点,开启此:

public void onCreate(Bundle savedInstanceState) 
{ 
    //...other code here 
    while (counter <5) 
    { 
     for (int i = 0; i < players; i++) 
     { 
      TextView name1 = (TextView) findViewById(R.id.pname); 
      name1.setText(names[i]+":"); 

      ptasks = 10; 
      rindex = generator.nextInt(ptasks); 

      TextView task = (TextView) findViewById(R.id.task); 
      task.setText(tasks[rindex]); 

      Button failButton = (Button) findViewById(R.id.fail_btn); 
      failButton.setOnClickListener(new View.OnClickListener() 
      { 
       public void onClick(View failed) 
       { 
        return; 
       } 
      }); 

      Button notButton = (Button) findViewById(R.id.notbad_btn); 
      notButton.setOnClickListener(new View.OnClickListener() 
      { 
       public void onClick(View notbad) 
       { 
        return; 
       } 
      }); 

      Button champButton = (Button) findViewById(R.id.champ_btn); 
      champButton.setOnClickListener(new View.OnClickListener() 
      { 
       public void onClick(View champp) 
       { 
        return; 
       } 
      }); 

     } 

     counter++; 
    } 
    //...other code here 
} 

public void onCreate(Bundle savedInstanceState) 
{ 
    //...other code here 
    int i = 0; 
    TextView name1 = (TextView) findViewById(R.id.pname); 
    TextView task = (TextView) findViewById(R.id.task);   

    Button failButton = (Button) findViewById(R.id.fail_btn); 
    failButton.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View failed) 
     { 
      //do what must be done for the current player, calculate score, etc 
      prepareNextPlayer(++i, names, name1, task); 
     } 
    }); 

    Button notButton = (Button) findViewById(R.id.notbad_btn); 
    notButton.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View notbad) 
     { 
      //do what must be done for the current player, calculate score, etc 
      prepareNextPlayer(++i, names, name1, task); 
     } 
    }); 

    Button champButton = (Button) findViewById(R.id.champ_btn); 
    champButton.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View champp) 
     { 
      //do what must be done for the current player, calculate score, etc 
      prepareNextPlayer(++i, names, name1, task); 
     } 
    }); 
    //...other code here 
} 

private void prepareNextPlayer(int i, ArrayList<String> names, String [] tasks, TextView nameField, TextView taskField) 
{ 
     if(i >= names.size()) 
     { 
      //all players have been processed, what happens now? 
      return; 
     } 

     int rindex = generator.nextInt(10); 
     nameField.setText(names.get(i)+":"); 
     task.setText(tasks[rindex]); 
}