我想在使用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「>」)
你發佈的代碼不會導致你看到的行爲。我建議尋找其他地方。從調試開始。在你的'setIsAvailable'方法中放置一個斷點,看看實際上改變了狀態。 (它不是你的排序。) –
你說得對,實際狀態甚至沒有改變。問題在於適配器。我所做的只是當getIsAvailable()返回true時,我只將聯繫人的狀態設置爲在線。否則,我什麼也沒做,因爲我將ImageView狀態預定義爲離線的紅色圓圈。不知何故,它可能會動態更改,我必須明確地將圖片從適配器更改爲離線。我不完全知道如何使用stackoverflow,但你可以發佈你的答案,我會標記它。 :) – user3234394
我很高興你解決了你的問題。我已發佈我的評論作爲你的問題的答案。 –