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

조회수 8210회

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

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

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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)