안드로이드 리스트뷰에서 동적으로 원소를 추가하려면 어떻게하죠?
조회수 8226회
리스트뷰를 만들어야되는데요. 지금 필요한게 버튼을 누르면 동적으로 새로운 원소가 추가되면서 성능 향상이나 그런거 없이 제가 이해하기 쉬운 코드인데요.
이미 비슷한 질문이 이 사이트에 올라와 있다는건 알고있는데 정확히 제가 원하는거랑은 조금 달라서요. 도와주세요.
1 답변
-
일단 xml을 정의합니다.
res/layout/main.xml
에<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/addBtn" android:text="Add New Item" android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="addItems"/> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:drawSelectorOnTop="false" /> </LinearLayout>
이렇게 작성하면 버튼이 위에있고 밑에 리스트뷰가 있는 단순한 레이아웃이 완성됩니다. 리스트뷰의 아이디가 @android:id/list라는걸 기억하세요. ListActivity에서 ListView를 정의하는데 사용됩니다.
public class ListViewDemo extends ListActivity { //리스트에 들어갈 원소를 초기화 ArrayList<String> listItems=new ArrayList<String>(); //리스트의 데이터를 다루는 어댑터 선언 ArrayAdapter<String> adapter; //버튼이 몇번 클릭됐는지를 저장하는 변수 int clickCounter=0; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems); setListAdapter(adapter); } //동적으로 리스트에 원소를 추가하기위한 메소드 public void addItems(View v) { listItems.add("Clicked : "+clickCounter++); adapter.notifyDataSetChanged(); } }
android.R.layout.simple_list_item_1은 안드로이드에서 기본적으로 제공하는 리스트 원소 레이아웃입니다.
listItems은 리스트의 원소를 저장하는 배열입니다. 리스트의 원소를 추가 삭제하고싶으면 listItems에 원소를 추가 삭제하면 됩니다. 그리고 그런 처리를 ArrayAdapter adapter에서
adapter.notifyDataSetChanged();
이런 식으로 해줍니다.어댑터에는 3개의 항목이 들어가는데 하나는 Context고 하나는 listactivity에 들어갈 list item레이아웃이고 하나는 각각 항목을 보여줄 실제 데이터입니다.
adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,listItems);
댓글 입력