3

このチュートリアルに基づいてリストビューを作成しました:

http://www.vogella.com/articles/AndroidListView/article.html

そのリンクで、私は実装しました

13> ListView で複数のアイテムを選択する

リスト ビューは正しく機能しています。次のコードを使用して、電話の連絡先を入力してリスト ビューをカスタマイズしました。

private List<Model> getModel()        
{                  
    List<Model> list = new ArrayList<Model>();    
    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    if (cur.getCount() > 0)
    {
         while (cur.moveToNext())
         {
              String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
              String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
               if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
               {
                    // This inner cursor is for contacts that have multiple numbers.
                    Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null);
                    while (pCur.moveToNext())
                    {
                         list.add(get(name));
                    }
                    pCur.close();
               }
         }
    }
    cur.close();
    return list;
}

連絡先の名前が表示されるようになりましたが、並べ替えられていません。これを並べ替えるにはどうすればよいですか?

助けてください!前もって感謝します!

4

2 に答える 2

4

この宣言を見てみましょう。

List<Model> list = new ArrayList<Model>();    

これはArrayListtype にパラメータ化されたオブジェクトModelです。これで、Model作成したクラスで、インターフェースを簡単に使用できComparableます。これを行うには、次を追加します。

implements Comparable<Model>

Modelクラスヘッダーの最後まで。

次に、 というメソッドの実装を追加する必要がありますcompareTo。これは単に物事を比較する方法です。

この実装を追加すると、 を呼び出して、オブジェクト listCollections.sort()に渡すことができます。ArrayListこれにより、リストがソートされます。

もう少し深く

したがって、最初に行うことは、Modelクラスに移動することです。現時点では、次のようなヘッダーがあります。

public class Model

あなたがしたいことは、これを次のように変更することです:

public class Model implements Comparable<Model>

これは何を意味するのでしょうか?

これは、Comparableインターフェイスのコードを提供することに同意したことを意味します。クラスにメソッド を記述する必要がありcompareToますModel。何かのようなもの:

@Override
public int compareTo(Object arg0) {
   // At this point, you put your comparison code in.
}

あなたの比較コード

それらをアルファベット順に並べ替えたい場合は、オブジェクトcompareToに存在するメソッドを使用できます。Stringまず、操作できるオブジェクトにarg0変換する必要があります。String

String otherName = ((Member)arg0).getName();

compareTo次に、Stringメソッドの値を単純に返すことができます。

return otherName.compareTo(this.name);
于 2013-04-28T12:23:11.597 に答える
0

戻りリストの前に Collections.sort(list) を追加します。クラス Model が Comparable を実装しているかどうかを確認します。そうでない場合は、 Collections.sort(list,comparator) を使用できます

于 2013-04-28T12:21:50.483 に答える