对ArrayAdapter或ArrayList的内容进行排序

Boa*_*rdy 4 android arraylist android-arrayadapter

我正在研究android项目,并正在使用从SQLite数据库中检索数据的ListView.

我正在使用ArrayList创建数据集,然后将此ArrayList添加到ArrayAdapter中.

当从数据库中检索数据时,我告诉SQLite进行排序,以便在将其添加到ListView时按字母顺序排列.在某些时候,信息将动态添加到ListView,而不需要再次从数据库中重新获取所有内容.但是,我想按字母顺序保留所有内容.

我该怎么做,我是否对DataSet进行排序,然后调用notifyDataSet Changes或直接在ArrayAdapter上进行排序.我已经考虑在ArrayAdapter上执行排序,但是这需要一个使用Comparator的参数但不确定它是什么,并且找不到任何可能对我想要实现的任何帮助的工作示例.

下面是填充数组并设置列表适配器的代码

ArrayList<Spanned> passwords = managePasswordList.getPasswordList();
        if (passwords != null && passwords.size() > 0)
        {
            passwordArrayAdapter = new ArrayAdapter<Spanned>(getActivity().getApplicationContext(), 
                    android.R.layout.simple_list_item_activated_1, passwords);
            setListAdapter(passwordArrayAdapter);
            myListView.setTextFilterEnabled(true);
            txtNoRecords.setVisibility(View.GONE);
        }
        else
        {
            txtNoRecords.setVisibility(View.VISIBLE);
        }
Run Code Online (Sandbox Code Playgroud)

然后,我将数据添加到数据集并使用以下内容刷新列表视图

String company = Encryption.decrypt(passwords.get(i).company);
                    String username = Encryption.decrypt(passwords.get(i).username);
                    details = Html.fromHtml(company + "<br />" + "<small><font color=\"#767676\">" + username + "</b></small>");    
Run Code Online (Sandbox Code Playgroud)

passwords.add(细节);
passwordArrayAdapter.notifyDataSetChanged();

感谢您的任何帮助,您可以提供.

更新1 我尝试过尼克布拉德伯里提出的建议,但我对比较器有问题.我有以下代码,但我不知道从哪里开始.

SQLiteDatabase myDb = null;
        Cursor cursor = null;
        ArrayList<Spanned> passwords = new ArrayList<Spanned>();
        try
        {
            myDb = context.openOrCreateDatabase("PasswordManager", Context.MODE_PRIVATE, null);
            cursor = myDb.rawQuery("SELECT * FROM password ASC", null);
            while (cursor.moveToNext())
            {
                final String company = Encryption.decrypt(cursor.getString(2));
                final String username = Encryption.decrypt(cursor.getString(4));
                Spanned details = Html.fromHtml(company + "<br />" + "<small><font color=\"#767676\">" + username + "</b></small>");
                passwords.add(details);

                Collections.sort(passwords, new Comparator<Spanned>() {

                    public int compare(Spanned lhs, Spanned rhs) {
                        return 0;
                    }
                });
            }
        }
        catch (SQLiteException ex)
        {
            common.showBasicAlertDialog("Unfortunately something has gone wrong.\n\nWe will fix this as soon as we can", false);
            Log.e("Database Error", ex.toString());
            return null;
        }
Run Code Online (Sandbox Code Playgroud)

在return语句中我不知道该怎么做,我已经尝试了return lhs.compareTo但是lhs和rhs变量没有compareTo函数,所以我不知道该怎么做.

Nic*_*ury 9

这是使用Comparator对ArrayList进行排序的简单示例.在此示例中,ArrayList定义为:

public class StatusList extends ArrayList<Status>
Run Code Online (Sandbox Code Playgroud)

此ArrayList的排序例程可能如下所示:

public void sort() {
    Collections.sort(this, new Comparator<Status>() {                
        @Override
        public int compare(Status item1, Status item2) {
            return item2.getDate().compareTo(item1.getDate());
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

将<Status>替换为ArrayList包含的任何对象,然后更改比较以比较要排序的对象的值.