【问题标题】:Sorting the arraylist by the values user has inputted按用户输入的值对数组列表进行排序
【发布时间】:2015-01-26 13:13:33
【问题描述】:

如果用户自己输入值,我如何对数组列表进行排序。例如,如果用户添加:Ben、Tom、Jack。然后按下播放它会打开一个新活动并显示名称 Jack。如果你反击,汤姆。然后是本。我希望它是相反的方式。我尝试了 collections.sort() 但没有运气。还有其他想法吗?

数组:

 ArrayList<String> list = new ArrayList<String>();
 ArrayAdapter<String> adapter;

用户添加姓名的方式:

  public void onClick(View v) {
        String input = mYrasytiVarda.getText().toString();
        if(input.length() > 0)
        {
            // add string to the adapter, not the listview
            adapter.add(input);


            // no need to call adapter.notifyDataSetChanged(); as it is done by the adapter.add() method
        }else{
            AlertDialog alertDialog = new AlertDialog.Builder(this).create();
            alertDialog.setTitle("Klaida:");
            alertDialog.setMessage("Blogai yrašytas vardas");
            alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
// here you can add functions
                }
            });

            alertDialog.show();
        }

    }

我在这里获取名称并将它们发送到其他活动:

@Override
            public void onClick(View v) {
                    // count items
                int i;
                for (i = 0; i < adapter.getCount(); i++) {
                    String obj = adapter.getItem(i);
                    // send items to other activity
                    Intent pradetiZaidima = new Intent(v.getContext(), ZaidimasActivity.class);
                    pradetiZaidima.putExtra("playerList", obj);
                    startActivity(pradetiZaidima);

                }
            }

我在这里展示它们:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_zaidimas);
        //get the player list from ZaidejaiActivity
        Bundle recdData = getIntent().getExtras();
        String myVal = recdData.getString("playerList");

        //show the player list

        mZaidejas = (TextView)findViewById(R.id.ZaidejoVardas);
        mZaidejas.setText(myVal);


            }
        });
    }

【问题讨论】:

    标签: java android sorting arraylist


    【解决方案1】:

    在这个循环中:

                for (i = 0; i < adapter.getCount(); i++) {
                    String obj = adapter.getItem(i);
                    // send items to other activity
                    Intent pradetiZaidima = new Intent(v.getContext(), ZaidimasActivity.class);
                    pradetiZaidima.putExtra("playerList", obj);
                    startActivity(pradetiZaidima);
    
                }
    

    ...您为列表中的每个项目创建一次活动,按照它们存储在 ArrayAdapter 中的顺序。您可以以相反的顺序遍历项目。 例如:

            @Override
            public void onClick(View v) {
                for (int i = adapter.getCount()-1; i >= 0; i--) {
                    String item = adapter.getItem(i);
    
                    Intent pradetiZaidima = new Intent(v.getContext(), ZaidimasActivity.class);
                    pradetiZaidima.putExtra("playerList", item);
                    startActivity(pradetiZaidima);
                }
            }
    

    【讨论】:

    • 我这样初始化适配器: {adapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, list); }。但是,使用您的代码,列表不包含任何值。问题是我希望列表中的每个项目都有新的活动。我只需要它从第一个项目到最后一个项目。不是最后一个到第一个。
    • 抱歉,我一定是记错了。不过,您可以重建列表,我将使用更多信息编辑我的答案。
    • 抱歉,您的代码没有回答我提出的问题。现在使用您的代码,我可以在一项活动中获得用户输入。我不想要那个。就像我说的:我希望列表中的每个项目都有新的活动。我愿意。但我需要以某种方式完成它,以便它打开的第一个活动是第一个输入,而不是最后一个。
    • 好的,感谢您的澄清,我以为您在描述错误的行为。考虑到这一点,我将再次编辑。
    • 谢谢,它成功了。但我认为我做错了什么。我的想法是,当新活动开始时,它会显示第一个名字(它终于起作用了),而当玩家按下下一个按钮时,它会显示第二个名字。如果所有这些名称都在字符串 myVal 中,这是否可能?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多