对于那些帮助我解决其他问题的人,谢谢。我几乎拥有它,但最后两个问题阻止它以我想要的方式工作。
这两个类应该做如下。第一节获得想要玩游戏的人的名字。使用相同的EditText,当他们输入他们的名字时,他们点击提交。当提交所有名称后,他们会点击完成/播放按钮,然后将它们及其数据(有多少玩家和名字)发送到下一个班级。在第1课我相信错误在于提交按钮。我正在尝试将所有名称添加到数组列表中,我不相信它正确地执行它。当我运行应用程序时,从用户的角度来看它的名称就好了。但是在下面的屏幕上,它应该显示它们的名称:(它表示null,因此它没有正确获取名称)和要执行的任务(它正确地执行)。
它需要做的最后一件事是在第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 :(得分:0)
我发现您的代码存在两个问题,这些问题可能解释了为什么在第二个null
中为您的玩家列表获得Activity
:
在Game
中,String[] names = bundle.getStringArray("arrayKey");
应为
ArrayList<String> names = bundle.getStringArrayList("arrayKey");`
在Class1
中,您将ArrayList
放入Bundle
(bundle.putStringArrayList("arrayKey", names);
)这是没有意义的,因为bundle
没有去哪里。您应该将其放入Intent
而不是:
done.putStringListExtra("arrayKey", names);
请注意,您的代码更加令人困惑,因为您在不同的范围内同时拥有名为String []
的{{1}}和名为names
的{{1}}。决定一个(我推荐ArrayList
)并摆脱另一个。
此外,在names
中,这是不必要的:
List
在此之前你已经拥有Game
,所以你也可以这样做:
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);
方法将信息放入 Intent
。在调用活动中,您可以通过
putExtra()
的信息
putExtraXXX()
通过Intent
获取Bundle
*,然后使用Intent
上的各种getExtras()
方法获取所有内容(不 get()
)。Bundle
上的Intent
方法。对于第二部分,正如您的代码目前所处,它只是立即循环遍历所有玩家(总共5次,我不理解getExtraXXX()
的目的。)
您应该做的是仅在按下3个按钮之一时执行所有处理(计算当前玩家的分数,增加玩家索引的值,设置下一个任务等)。如果它将是一个长期存在的任务,您可以禁用按钮直到完成,以强制要求每个玩家只允许按下一个按钮。当下一位玩家准备就绪时重新启用按钮。
我没有精力生产你需要的一切,但在起点上,转过来:
Intent
进入
counter