2012-05-28 3 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 : 인쇄 할 때 활동의 시작 부분에 있던 내용이 아닌 목록의 현재 * 내용을 표시합니다. –

+0

성 감자! 그렇게하면 문제가 해결됩니다! 하지만 어떻게 채워질 수 있었는지 모르겠다. 당신이 말하는 것을 이해하지만 코드를 변경하지는 않습니다. 해당 배열에 데이터를 채 웁니다. –

관련 문제