2010-12-02 12 views

答えて

9
final String[] GROUP_PROJECTION = new String[] { 
      ContactsContract.Groups._ID, ContactsContract.Groups.TITLE }; 
    cursor = getContentResolver().query(
    ContactsContract.Groups.CONTENT_URI, GROUP_PROJECTION, null, 
      null, ContactsContract.Groups.TITLE); 

      GlobalConfig.groupList.clear(); 
    Group g = new Group(); 
    g.GroupIdList += "0"; 
    g.setGroupTitle("ALL"); 
    GlobalConfig.groupList.add(g); 
    while (cursor.moveToNext()) { 

     String id = cursor.getString(cursor 
       .getColumnIndex(ContactsContract.Groups._ID)); 

     String gTitle = (cursor.getString(cursor 
       .getColumnIndex(ContactsContract.Groups.TITLE))); 

     if (gTitle.contains("Group:")) { 
      gTitle = gTitle.substring(gTitle.indexOf("Group:") + 6).trim(); 

     } 
     if (gTitle.contains("Favorite_")) { 
      gTitle = "Favorites"; 
     } 
     if (gTitle.contains("Starred in Android") 
       || gTitle.contains("My Contacts")) { 
      continue; 
     } 

     Group gObj = new Group(); 

     int pos = GlobalConfig.GroupContainsTitle(gTitle); 
     if (pos != -1) { 
      gObj = GlobalConfig.groupList.get(pos); 
      gObj.GroupIdList += "," + id; 
      GlobalConfig.groupList.set(pos, gObj); 

     } else { 
      gObj.GroupIdList += id; 
      gObj.setGroupTitle(gTitle); 
      GlobalConfig.groupList.add(gObj); 

     } 

     // Log.d("GrpId Title", gObj.getGroupIdList() + 
     // gObj.getGroupTitle()); 
    } 
+0

私の質問には完璧な解決策です。しかし、ここでは、GlobalConfigクラスの使い方と、与えられたGroupContainsTitleの格納方法について理解していません。 @AbhishekはGlobalConfigクラスの詳細を明らかにすることができます。それは私の時間を節約します。 – Prativa

+0

@prativa GlobalConfigは、アプリケーション全体からアクセス可能な静的なコレクションを格納するためにここで使用される単純な静的クラスです。 – Abhi

+0

パーフェクト!なぜ同じグループを増やすのですか?私は例えば得る。 3人の同僚と2人の友人。 – erdomester

5

@Abhiによって答えはOKですが、いくつかの制限しました:目に見えないグループ

  • は「ゴースト」グループの一覧が表示されます

    • が削除連絡先
    • の一覧が表示されますが一覧表示されます(つまり、どのグループであります削除されているはずであるが、依然として縁無しになっている)

    -

    private class GroupInfo { 
        String id; 
        String title; 
    
        @Override 
        public String toString() { 
         return title+ " ("+id+")"; 
        } 
    
        public String getId() { 
         return id; 
        } 
    } 
    
    List<GroupInfo> groups = new ArrayList<GroupInfo>(); 
    
    public void loadGroups() { 
        final String[] GROUP_PROJECTION = new String[] { 
          ContactsContract.Groups._ID, 
          ContactsContract.Groups.TITLE, 
          ContactsContract.Groups.SUMMARY_WITH_PHONES 
          }; 
    
        Cursor c = getContentResolver().query(
          ContactsContract.Groups.CONTENT_SUMMARY_URI, 
          GROUP_PROJECTION, 
          ContactsContract.Groups.DELETED+"!='1' AND "+ 
          ContactsContract.Groups.GROUP_VISIBLE+"!='0' " 
          , 
          null, 
          null); 
        final int IDX_ID = c.getColumnIndex(ContactsContract.Groups._ID); 
        final int IDX_TITLE = c.getColumnIndex(ContactsContract.Groups.TITLE); 
    
        Map<String,GroupInfo> m = new HashMap<String, GroupInfo>(); 
    
        while (c.moveToNext()) { 
         GroupInfo g = new GroupInfo(); 
         g.id = c.getString(IDX_ID); 
         g.title = c.getString(IDX_TITLE); 
         int users = c.getInt(c.getColumnIndex(ContactsContract.Groups.SUMMARY_WITH_PHONES)); 
         if (users>0) { 
          // group with duplicate name? 
          GroupInfo g2 = m.get(g.title); 
          if (g2==null) { 
           m.put(g.title, g); 
           groups.add(g); 
          } else { 
           g2.id+=","+g.id; 
          } 
         } 
        } 
        c.close(); 
        } 
    
  • 1

    古い過度の回答は必要ありません。もっと簡単な解決法がここにあります。

    final String[] GROUP_PROJECTION = new String[] { 
          ContactsContract.Groups._ID, ContactsContract.Groups.TITLE }; 
    Cursor gC = getContentResolver().query(
          ContactsContract.Groups.CONTENT_URI, GROUP_PROJECTION,null,null,null); 
    gC.moveToFirst(); 
    while (!gC.isAfterLast()) { 
         int idcolumn = gC.getColumnIndex(ContactsContract.Groups.TITLE); 
         String Id = gC.getString(idcolumn); 
         ArrayL.add(Id); 
         gC.moveToNext(); 
    } 
         LinkedHashSet<String> s = new LinkedHashSet<String>(); 
         s.addAll(ArrayL); 
         ArrayL.clear(); 
         ArrayL.addAll(s); 
    
    +0

    ありがとうございました!これは簡単なものです。 – Darsh

    +0

    "ArrayL"はどこから来たのですか? – retorquere

    関連する問題