2012-02-18 20 views
0

名前と番号を含む連絡先データが入力されたListViewでフィルタを使用しています。私はEditTextにテキストを入力するとき フィルタの連絡先の名前を削除してメールアドレスを削除する

は、今私は中には、I型火災 adapter.getFilter().filter(s.toString())

1)になりますこれは、2つの問題を得た)私のコードで( 'AA'、後者

私は名前の開始を見ることができます

'aa'(例:aakruti)からは と同じ時刻にメールアドレスを表示することができますが、これはフィルタが起動されたときに表示させるようにしています( )。

enter image description here

2)私は携帯電話の作り付けの連絡先リストで後者の 'AA'()

を入力すると、私は名前が

aakruti例えば 'AA' から始まる見ることができますが、私は1つの名前すなわちSATYAが欠けている(これは後者に 'aa'を入力すると 検索で表示される)

ここ

enter image description here

runQueryOnBackgroundThread

StringBuilder buffer = null; 
String[] args = null; 
    if (constraint != null) { 
    buffer = new StringBuilder(); 
    buffer.append("UPPER("); 
    buffer.append(ContactsContract.Contacts.DISPLAY_NAME); 
    buffer.append(") GLOB ?"); 
    args = new String[] { constraint.toString().toUpperCase() + "*" }; 
    } 
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 
System.out.println(buffer); 
return mContent.query(
      ContactsContract.Contacts.CONTENT_URI, 
      projection, 
      buffer == null ? null : buffer.toString(), 
      args,sortOrder 
); 

内の投影データ

public static String[] projection = new String[] { 
      ContactsContract.Contacts._ID, 
      ContactsContract.Contacts.DISPLAY_NAME 

    }; 

EDIT

は、これまでのところ、私は

にアクセスしようとしました、私のフィルタクエリです
ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME 
ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME 
ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME 
ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME 

しかしGIVEN_NAMEが、それは例えばcontact name which has email address

を示しemail address少数すぎても表示、

[email protected] 
Raul Jakson   (which only has email address no contact number) 
Raul Jakson   (i see this name twice as it has two different email address , but i wanna see it as name) 

はそう誰もが、私は、電子メールアドレスを制限し、唯一持っているだけNAMESを表示することができますどのように私に言うことができます連絡先の電話番号?

+0

メールアドレスの問題に関して、私はあなたが何か間違っているとは思わない。おそらく、Androidの連絡先と同じようなものでしょう。電子メールを本当に除外したい場合は、別の節をSQLに追加して、 'buffer.append(" AND "+" ContactsContracts.FAMILY_NAME + "NOT LIKE '%@%'); ' –

+0

@ 1kaさて、私はアンドロイドで検索したところ、上記の繰り返しは「連絡先に登録」されているが連絡先リストにあるので、私はRaul Jaksonを連絡先のように1つのエンティティにすることができます – Hunt

+0

連絡先ID(_ID)を含めて、コードまたはUNIQUE句を使用してフィルタリングしてみてください。 –

答えて

2

まず、連絡先に名前がないため、電子メールが表示されます。このような場合、Androidは表示名として電子メールを使用します。これらの表示を避けるには、GIVEN_NAMEとFAMILY_NAMEを使用してください。 api docs for StructuredNameを参照してください。

第2に、AAで始まるDISPLAY_NAMEを検索しているため、SATIYAが見つかりません。サティヤは言葉ではなく、イニシャルのシーケンスです。あなたがこれらを見つけたいなら、これに応えるためにあなたの質問を工夫しなければならないでしょう。あなたは* A * A *を検索することができますが、おそらく多くの人がヒットします。私は、BOがBarack Obamaを見つけると、最初の+姓検索のいくつかの変形をAndroidが行っていると思われる。

+0

参考にしていただきありがとうございます、初期+姓の制約の書き方を教えてくださいか? – Hunt

+1

これを試してみてください。最初のinitalと||の姓の連結: 'buffer = new StringBuilder(); buffer.append(" UPPER(SUBSTR( ")); buffer.append(ContactsContract.C ontacts.GIVEN_NAME); buffer.append( "、1,1))||"); buffer.append( "UPPER("); buffer.append(ContactsContract.Contacts.FAMILY_NAME); buffer.append( ")GLOB?"); args = new String [] {constraint.toString()。toUpperCase()+ "*"}; ' –

+0

[自分のウェブサイト](http://www.sqlite.org/lang_expr.html)からSQLite構文の詳細を見つけることができます。 –

関連する問題