2013-09-03 1 views
2

다음 문제가 있습니다. 목록보기와 두 개의 버튼이 있습니다. 단편의 시작 부분에서 일부 데이터는 2 명의 Arraylists에 저장됩니다. 처음에는 첫 번째 Arraylist의 내용이 잘 작동하는 listview에 표시됩니다. 첫 번째 버튼을 클릭하면 ListView에 두 번째 ArrayList가 표시됩니다. 어떤 사용자에게 잘 작동하지만 adapter.clear()를 호출하자마자. 첫 번째 Arraylist가 삭제되었습니다. 따라서 그는 첫 번째 버튼을 클릭하여 첫 번째 목록으로 돌아갈 수 없습니다. 나는 Arraylist를 삭제하지 않으므로 adapter.clear()가 왜 그런지 궁금합니다. 어떤 도움이라도 좋을 것입니다. 밑에 코드.arrayadapter.clear()는 기본 데이터를 삭제합니다.

public class MessagesFragment extends Fragment { 

private ArrayList<Message> outbound; 
private ArrayList<Message> inbound; 
private MessageAdapter messageadapter; 
private int box; 
private View rootView; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_messages, container, 
      false); 
    outbound = new ArrayList<Message>(); 
    inbound = new ArrayList<Message>(); 
    this.rootView = rootView; 
    box = 0; 
    messageadapter = new MessageAdapter(getActivity(), 
        R.layout.item_message, inbound); 
    ((ListView) rootView.findViewById(R.id.lv_message)) 
        .setAdapter(messageadapter); 
    initializeListeners(); 
    return rootView; 
} 

private void initializeListeners() { 
    rootView.findViewById(R.id.rb_message_inbox).setOnClickListener(
      new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        showBox(0); 
       } 
      }); 

    rootView.findViewById(R.id.rb_message_outbox).setOnClickListener(
      new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        showBox(1); 
       } 
      });  
} 

private void showBox(int box) { 
    messageadapter.clear(); 
    switch (box) { 
    case 0: 
     messageadapter.addAll(inbound); 
     break; 
    case 1: 
     messageadapter.addAll(outbound); 
     break; 
    } 
    this.box = box; 
    messageadapter.notifyDataSetChanged(); 
} 
} 

그래서 처음에 목록이 ArrayList의 인바운드로 채워됩니다. 그러나 showbox (1)가 호출되면 inbound는 messageadapter.clear()가 호출 되 자마자 삭제됩니다. iutbound가 표시되지만 해당 인바운드가 비어 있기 때문에 showbox (0)를 호출하면 빈 상태가됩니다.

답변

6

귀하의 클래스 구성원 arraylist가 귀하의 어댑터에 설정 한 것과 동일한 참조이기 때문에 이런 일이 발생했습니다. 어댑터에 데이터를 입력하십시오.

adapter.addAll(new ArrayList<Message>(inbound); 
+1

감사합니다. 그러나이 값을 변경했을 때만 작동합니다. messageadapter = 새로운 MessageAdapter (getActivity() \t \t \t \t \t \t R.layout.item_message 새로운 ArrayList를 (수신)); – Cheetah

+0

반갑습니다. Java에서 참조 할 때주의하십시오. – traninho

+0

고마워, 효과가 있었다. 문제는 명확한 방법 때문이었습니다. 그것은 호출 할 때마다 Arraylist를 지 웁니다. –

관련 문제