2014-01-25 21 views
0

我想在使用Facebook API的Android應用程序中對Facebook聯繫人列表進行排序。第一部分應該是聯機的聯繫人(按字母順序排列),第二部分是脫機聯繫人(也按字母順序排序)。所以我實現了Comparable接口,並在需要排序的項目的類中重寫compareTo()。爲什麼collections.sort()更改它正在排序的項目的屬性?

public class FBRowItem implements Comparable { 

private Bitmap imageId; // pazi bese int, za R.resurs 
private String contactName; 
private String userName; 
private Boolean isAvailable; 

public FBRowItem() { 
    this.imageId=null; 
    this.contactName=null; 
    this.userName=null; 
    this.isAvailable=false; 
} 
public FBRowItem(Bitmap imageId, String contactName, String userName, Boolean isAvailable) { 
    this.imageId = imageId; 
    this.contactName=contactName; 
    this.userName = userName; 
    this.isAvailable=isAvailable; 
} 

public Bitmap getImageId() { 
    return imageId; 
} 
public void setImageId(Bitmap imageId) { 
    this.imageId = imageId; 
} 
public String getContactName() { 
    return contactName; 
} 
public void setContactName(String contactName) { 
    this.contactName=contactName; 
} 
public String getUserName() { 
    return userName; 
} 
public void setUserName(String userName) { 
    this.userName=userName; 
} 
public Boolean getIsAvailable(){ 
    return isAvailable; 
} 
public void setIsAvailable (Boolean isAvailable){ 
    this.isAvailable=isAvailable; 
} 

@Override 
public String toString() { 
    return contactName; 
} 
@Override 
public int compareTo(Object arg0) { 
    FBRowItem f = (FBRowItem) arg0; 

    if((this.getIsAvailable()).equals(true)){ 
     if((f.getIsAvailable()).equals(true)) 
      return this.contactName.compareTo(f.contactName); 
     else return -1; 
    } 
    else{ 
     if((f.getIsAvailable()).equals(true)) 
      return +1; 
     else 
      return this.contactName.compareTo(f.contactName); 
    } 



    // return this.contactName.compareTo(f.contactName); 
} 

} 

這裏是我要求排序聯繫人的方法。

public static void receiveAllFBContacts(Context context){ 

    rowItems = FB_FriendsActivity.friendsList(context); 
    Collections.sort(rowItems); 

} 

正如你可以在看的compareTo()方法,如果我使用的最後一行實際上只是此刻評論,在Collections.sort(rowItems)工作得很好,所以我的所有聯繫人排序,但與在線和離線的分離。 問題:但是,如果我使用上面看到的非註釋部分,Collection.sort(rowItems)將出於某種原因將所有聯繫人的狀態更改(!!)爲聯機狀態。嘗試閱讀一些文件,但無法進一步。歡迎任何幫助。

(rowItems是ArrayList的 「< 」FBRowItem「>」)

+0

你發佈的代碼不會導致你看到的行爲。我建議尋找其他地方。從調試開始。在你的'setIsAvailable'方法中放置一個斷點,看看實際上改變了狀態。 (它不是你的排序。) –

+0

你說得對,實際狀態甚至沒有改變。問題在於適配器。我所做的只是當getIsAvailable()返回true時,我只將聯繫人的狀態設置爲在線。否則,我什麼也沒做,因爲我將ImageView狀態預定義爲離線的紅色圓圈。不知何故,它可能會動態更改,我必須明確地將圖片從適配器更改爲離線。我不完全知道如何使用stackoverflow,但你可以發佈你的答案,我會標記它。 :) – user3234394

+0

我很高興你解決了你的問題。我已發佈我的評論作爲你的問題的答案。 –

回答

0

您發佈不能對你所看到的行爲的代碼。我建議尋找其他地方。從調試開始。在你的setIsAvailable方法中放置一個斷點,看看實際上改變了狀態。 (它不是你的排序。)

相關問題