我正在开发 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);
}
然后我将数据添加到数据集并使用以下内容刷新列表视图
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>");
passwords.add(详细信息);
passwordArrayAdapter.notifyDataSetChanged();
感谢您的任何帮助,您可以提供。
更新 1 我已经尝试按照 Nick Bradbury 的建议进行操作,但比较器有问题。我有以下代码,但我不知道从这里去哪里。
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;
}
在 return 语句中,我不知道该怎么做,我试过return lhs.compareTo
了,但是 lhs 和 rhs 变量没有 compareTo 函数,所以我不知道该怎么做。