阵列列表正确传输&为每个阵列列表成员设置分数

时间:2011-04-24 19:15:47

标签: java android arrays button

对于那些帮助我解决其他问题的人,谢谢。我几乎拥有它,但最后两个问题阻止它以我想要的方式工作。

这两个类应该做如下。第一节获得想要玩游戏的人的名字。使用相同的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++;
        }
    }
}

作为旁注。你在那些部分中看到的那些//旁边有评论的东西我在那里,因为我在那些和那些没有注释掉但没有工作的那些之间进行测试。如果你有任何关于修复任何此项的意见我很感激。

1 个答案:

答案 0 :(得分:0)

我发现您的代码存在两个问题,这些问题可能解释了为什么在第二个null中为您的玩家列表获得Activity

  1. Game中,String[] names = bundle.getStringArray("arrayKey");应为

    ArrayList<String> names = bundle.getStringArrayList("arrayKey");`
    
  2. Class1中,您将ArrayList放入Bundlebundle.putStringArrayList("arrayKey", names);)这是没有意义的,因为bundle没有去哪里。您应该将其放入Intent而不是:

    done.putStringListExtra("arrayKey", names);
    
  3. 请注意,您的代码更加令人困惑,因为您在不同的范围内同时拥有名为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);
    

    基本概念是,通过调用活动,您可以使用各种bundleBundle 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