2012-05-28 88 views
2

我的數組列表以某種方式被填充。什麼填充這個數組列表?

看看這段代碼:

final ListView list = getListView(); 
boolean threadNeeded = true; 
//settings 
list.setItemsCanFocus(false); 
Bundle extras = getIntent().getExtras(); 
allFriends = getIntent().getParcelableExtra("shibby.whisper.allFriends"); 
selectedFriends = getIntent().getParcelableExtra("shibby.whisper.selectedFriends"); 
System.out.println("JUST ENTERED ACTIVITY : "+selectedFriends.getPositions()); 

if(extras !=null) { 
    maxPlayers = extras.getInt("max_players"); 
} 

if(allFriends != null){ 
    if(!allFriends.getIds().isEmpty()){ 
     threadNeeded = false; 
    } 
} 

if(selectedFriends == null){ 
    System.out.println("selectedFriends is null before callback from ListActivity"); 
    selectedFriends = new PlayerList(); 
} 

list.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     FacebookFriendsAdapter a = (FacebookFriendsAdapter) list.getAdapter(); 
     //select item 
     boolean isSelected = a.toggleSelected(new Integer(position)); 

     //if reached maximum players and have selected a new user 
     if(((maxPlayers+1 == a.getMaxPlayersCounter() && maxPlayers != 0) && isSelected) 
      || (maxPlayers == 0 && a.getMaxPlayersCounter() == maxAvailablePlayers+1)){ 
      Log.e("addfriends","Max Players Reached"); 
      a.toggleSelected(new Integer(position));   
      final Dialog dialog = new Dialog(FacebookFriendsListActivity.this, R.style.CustomDialogTheme); 
      dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      dialog.setContentView(R.layout.maxplayers); 
      dialog.setCancelable(true); 
      // set the custom dialog components - text, image and button 
      Button dialogButton = (Button)  dialog.findViewById(R.id.max_players_dismiss_btn); 
      // if button is clicked, close the custom dialog 
      dialogButton.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        dialog.dismiss(); 
       } 
      }); 
      dialog.show(); 
     } 
    } 
}); 

m_friends = new ArrayList<Player>(); 
this.m_adapter = new FacebookFriendsAdapter(this, R.layout.facebbok_friends_item, m_friends); 

//set the selected friends on the adapter to remember earlier picks 
if(selectedFriends != null){ 
    oldPositions = selectedFriends.getPositions(); 
    m_adapter.setSelectedIds(selectedFriends.getPositions()); 
    m_adapter.setMaxPlayersCounter(selectedFriends.getIds().size()); 
    System.out.println("Max player selected Is : "+maxPlayers+" And Selected Players Counter Is :" +m_adapter.getMaxPlayersCounter()); 
} 

當活動開始時,selectedFriends.getPosition()返回空。

當我點擊一個按鈕,我做這個動作:

if(oldPositions != null){ 
    System.out.println("This is old positions : " + oldPositions); 
} 

其中填充(由新位置),但我不明白爲什麼。我引用了一些我不應該做的事嗎?我是否覆蓋內存中的數據?

編輯:這種情況發生在我從ListView中選擇一些朋友之後。 toggleSelected()添加或刪除內部ArrayList中的項目。

回答

1

我認爲你的錯誤是假設這條線使得無論getPositions回副本:

oldPositions = selectedFriends.getPositions(); 

實際上,它不僅使引用的副本 - 它不會使整個列表的淺表副本。

你可能想是這樣的(我只是猜測類型):

oldPositions = new ArrayList<Position>(selectedFriends.getPositions()); 
+0

是的,我是知道的,但事情是,它不是suppoused來填充任何東西,正如我所說在活動的開始時,它是空的。 –

+0

@ eric.itzhak:當您打印它時,顯示列表的* current *內容,而不是它在活動開始時的內容。 –

+0

聖馬鈴薯!這樣做解決了問題!但我不明白它怎麼會被填充?我明白你說的是什麼,但我根本沒有改變它,在代碼的最後,我用數據庫中的數據填充數組 –