안드로이드 리스트뷰에서 동적으로 원소를 추가하려면 어떻게하죠?


리스트뷰를 만들어야되는데요. 지금 필요한게 버튼을 누르면 동적으로 새로운 원소가 추가되면서 성능 향상이나 그런거 없이 제가 이해하기 쉬운 코드인데요.

이미 비슷한 질문이 이 사이트에 올라와 있다는건 알고있는데 정확히 제가 원하는거랑은 조금 달라서요. 도와주세요.

  • 2016년 01월 27일에 작성됨

조회수 1355


1 답변


좋아요
0
싫어요
채택취소하기

일단 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);

  • 2016년 01월 27일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close