관리 메뉴

moozi

ListView 구현하기 본문

안드로이드개발강좌

ListView 구현하기

moozi 2010. 1. 13. 16:50
[ 안드로이드 개발 2.0 ] ListView 구현하기

ListView는 여러 항목들을 수직방향으로 나열해서 스크롤하면서 볼 수 있게 해줍니다. ListView는 AutoComplete비슷한 기능도 포함하고 있어서 찾으려는 항목을 검색할 수 도 있습니다.

다음은 ListView의 실행 모습입니다.


안드로이드 개발자 사이트의 내용을 기준으로 살펴봅니다.

1. 먼저 다음과 같이 프로젝트를 생성합니다.


2. 다음 코드를 왼쪽 프로젝트 탐색기에서 src -> my.HelloListView -> HelloListView.java 를 열어서 덮어씁니다.

package my.HelloListView;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class HelloListView extends ListActivity {
    /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
  
   setListAdapter(new ArrayAdapter<String>(this,
           android.R.layout.simple_list_item_1, COUNTRIES));
   getListView().setTextFilterEnabled(true);
 }
 
 static final String[] COUNTRIES = new String[] {
     "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
     "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
     "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
     "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
     "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
     "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory",
     "British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi",
     "Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
     "Cayman Islands", "Central African Republic", "Chad", "Chile", "China",
     "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
     "Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus", "Czech Republic",
     "Democratic Republic of the Congo", "Denmark", "Djibouti", "Dominica", "Dominican Republic",
     "East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea",
     "Estonia", "Ethiopia", "Faeroe Islands", "Falkland Islands", "Fiji", "Finland",
     "Former Yugoslav Republic of Macedonia", "France", "French Guiana", "French Polynesia",
     "French Southern Territories", "Gabon", "Georgia", "Germany", "Ghana", "Gibraltar",
     "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau",
     "Guyana", "Haiti", "Heard Island and McDonald Islands", "Honduras", "Hong Kong", "Hungary",
     "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica",
     "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyzstan", "Laos",
     "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg",
     "Macau", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands",
     "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova",
     "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia",
     "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand",
     "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "North Korea", "Northern Marianas",
     "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru",
     "Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar",
     "Reunion", "Romania", "Russia", "Rwanda", "Sqo Tome and Principe", "Saint Helena",
     "Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon",
     "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Saudi Arabia", "Senegal",
     "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands",
     "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Korea",
     "Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden",
     "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "The Bahamas",
     "The Gambia", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey",
     "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Virgin Islands", "Uganda",
     "Ukraine", "United Arab Emirates", "United Kingdom",
     "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan",
     "Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis and Futuna", "Western Sahara",
     "Yemen", "Yugoslavia", "Zambia", "Zimbabwe"
   };
}

위 코드를 살펴보면

public class HelloListView extends ListActivity {

이 부분에서 HelloListView 클래스는 ListActivity 를 상속받고 있습니다. 이전의  다른 예제들에서는 생성된 클래스가 Activity를 상속받고 있는 것과 다른 점입니다.

이 예제에서도 AutoComplete 구현 예제처럼 COUNTRIES 배열을 사용하고 있습니다.


3. Ctrl + F11 로 실행합니다.


위 화면은 실행후 ko라고 타이핑한 모습입니다. 화면상에는 입력하는 필드가 보이지 않지만 그냥 타이핑하면 위와 같이 글자가 입력되고 검색결과를 보여줍니다. 백스페이스로 ko 글자를 지우면 다시 모든 목록이 나타납니다.



8 Comments
  • 프로필사진 2010.01.13 16:58 흥미롭군요.
  • 프로필사진 moozi 2010.01.13 17:13 신고 방문해주시고 격려해 주셔서 고맙습니다.
  • 프로필사진 열시미 배우는 사람 2010.01.14 16:50 감사 합니다...열시미 배우고 있습니다...
  • 프로필사진 Lo샷ve 2010.02.05 14:26 리스트에서 항목을 삭제하기 위한 버튼 배치나 삭제 방법은 어렵나요?
  • 프로필사진 moozi 2010.02.05 14:30 신고 그부분은 제가 아직 해보지 않았습니다. ^^;;;
  • 프로필사진 solkit 2010.03.12 07:51 안녕하세요? ListItem을 클릭했을 때 그 내용을 받아서 다음 Activity에 넘기려고 하는데요.
    일단 클릭한 내용을 받는게 안 되네요.
    onListItemClick 메소드를 사용했는데요. 이걸로 어떻게 내용을 받아서 처리를 할 지 모르겠어요.

    일단 아래 소스에서 Toast 에 test1 이라던가 test2라던가 이렇게 선택한 내용이 뜨게 할 수는 없나요?

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setListAdapter(new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1, SAMPLES));
    getListView().setTextFilterEnabled(true);
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    super.onListItemClick(l, v, position, id);
    String test = Integer.toString(getSelectedItemPosition());
    Toast.makeText(start.this, test + " SELECTED", Toast.LENGTH_SHORT).show();
    }

    static final String[] SAMPLES = new String[] {
    "test1", "test2", "test3", "test4", "test5"
    };
  • 프로필사진 moozi 2010.03.12 23:42 신고 다음과 같이 해보세요

    protected void onListItemClick (ListView l, View v, int position, long id) {
    String test = Integer.toString(position);
    Toast.makeText(HelloListView.this, test + " SELECTED", Toast.LENGTH_SHORT).show();

    };

    그리고, Toast.makeText(HelloListView.this, test + " SELECTED", Toast.LENGTH_SHORT).show();
    에서 HelloListView.this 에서 HelloListView 대신 solkit님이 작성한 클래스명 적어주세요

    ^^
  • 프로필사진 solkit 2010.03.13 05:09 와우.. 정말 감사합니다.

    position을 가지고 control 하면 되는군요.

    String test = SAMPLES[position];
    이렇게 하면 아예 텍스트를 받아 올 수 있고.. ^^

    정말 감사합니다.
댓글쓰기 폼