Java 数组列表正确传输&为每个数组列表成员设置分数
感谢所有在其他问题上帮助我的人,谢谢。我几乎有了它,但最后两个问题阻止了它按我想要的方式工作 这两个类的作用如下。第一类获得想要玩游戏的人的名字。使用相同的编辑文本,输入名称时单击提交。提交所有姓名后,他们单击“完成/播放”按钮,该按钮将向下一个班级发送姓名和球员人数数据。在第1类中,我认为错误在于提交按钮。我正在尝试将所有名称添加到数组列表中,但我不认为它做得正确。当我运行该应用程序时,从用户的角度来看,它可以很好地接收名称。但是在下面的屏幕上,它应该显示它们的名称:它显示null,因此它没有正确地获取名称,并且它正确地执行了一项任务 它需要做的最后一件事是在第2类上,它需要允许那些按钮失败,champ,而且还不错,只需要单击一次,然后它为轮到它的人的名字设置一个分数,然后它需要开始下一个人和任务。它既不是自动取款机也不是自动取款机。我真的很感激你能帮我把这该死的东西修好。感谢所有花时间回复的人。如果你讨厌看到我的帮助请求,我也很抱歉 第一类Java 数组列表正确传输&为每个数组列表成员设置分数,java,android,arrays,button,Java,Android,Arrays,Button,感谢所有在其他问题上帮助我的人,谢谢。我几乎有了它,但最后两个问题阻止了它按我想要的方式工作 这两个类的作用如下。第一类获得想要玩游戏的人的名字。使用相同的编辑文本,输入名称时单击提交。提交所有姓名后,他们单击“完成/播放”按钮,该按钮将向下一个班级发送姓名和球员人数数据。在第1类中,我认为错误在于提交按钮。我正在尝试将所有名称添加到数组列表中,但我不认为它做得正确。当我运行该应用程序时,从用户的角度来看,它可以很好地接收名称。但是在下面的屏幕上,它应该显示它们的名称:它显示null,因此它没有
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++;
}
}
}
作为旁注。你在那些旁边有//注释的部分中看到的东西我在那里,因为我在这些部分和那些没有注释的部分之间进行了测试,它们都不起作用。如果您对修复这些问题有任何意见,我将不胜感激。我发现您的代码存在两个问题,这可能解释了为什么您在第二个活动中的玩家列表为空: 在游戏中,String[]name=bundle.getStringArrayArrayRayKey;应该是
ArrayList<String> names = bundle.getStringArrayList("arrayKey");`
请注意,您的代码更加混乱,因为您在不同的作用域中同时有一个字符串[]命名名称和一个ArrayList命名名称。决定其中一个,我会推荐这个清单,然后去掉另一个
此外,在游戏中,这是不必要的:
Bundle bundle = this.getIntent().getExtras();
String[] names = bundle.getStringArray("arrayKey");
Intent game = getIntent();
players = game.getIntExtra("players", 1);
在此之前,您已经拥有了捆绑包,因此您也可以执行以下操作:
Bundle bundle = this.getIntent().getExtras();
String[] names = bundle.getStringArray("arrayKey");
players = bundle.getInt("players", 1);
基本概念是,从调用活动开始,使用各种putExtra和putExtraXXX方法将信息放入意图中。在被调用的活动中,您可以通过以下两种方式获得输入到意图中的信息:
通过getExtras从Intent获取Bundle*,然后使用Bundle上的各种get方法获取放入的所有内容,而不是Intent。
直接调用Intent上的getExtraXXX方法。
对于第二部分,正如您的代码目前所示,它将立即在所有玩家上循环5次,我不理解计数器的用途
您应该做的是,只在按下3个按钮中的一个按钮时,执行所有处理,计算当前玩家的分数,增加玩家索引的值,设置下一个任务等。如果这将是一项长期任务,您可以禁用按钮直到完成,以便强制要求每个玩家只能按下一个按钮。当下一个播放机准备就绪时,重新启用按钮
我没有精力生产出你所需要的一切,但在一个起点上,把这个:
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
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]);
}