'안드로이드 listview'에 해당되는 글 1건

  1. 2011.10.18 Android - ListView ( 리스트뷰 ) (3)

Android - ListView ( 리스트뷰 )

Android 2011.10.18 23:29

리스트뷰에 대해서 알아보겠습니다.
리스트를 보여주는 도구 인데요.
자동적으로 지정한 리스트가 늘어나면 스크롤뷰가 생성되 화면이동이 가능합니다.
여러 내용을 간단하게 분기할 때 가능하고 분기한 내용에 따라 페이지 이동도 가능합니다.

리스트뷰는 어떤 데이터 그룹에 대한 각각의 정보들을 항목별로 출력시키고 사용자에게 원하는 항목을 검색하거나 선택할수 있도록 해주는 컨트롤 객체입니다. 
ArrayAdapter라는 클래스가 있는데 리스트뷰는 이 클래스를 이용해서 사용자가 지정한 데이터에 접근하도록 구현되어 있습니다.
간단한 데이터를 다룰때는 ArrayAdapter 클래스를 그대로 사용할 수도 있지만, 사용자가 원하는 다양한 형태를 효과적으로 표현하기 위해서는 ArrayAdapter 클래스를 그대로 사용하지 않고 ArrayAdapter 클래스에서 상속받아 새로운 클래스를 만드는 경우도 많을 것입니다.
이것은 리스트뷰의 setAdapter 메소드에 잘 표현되어 있습니다. setAdapter 는 리스트뷰에 사용할 데이터 객체를 넘겨주는 메소드입니다. 일반적으로 생각한다면 ArrayAdapter 객체를 생성하여 사용할 데이터를 저장할 것이고 데이터가 저장된 ArrayAdapter 객체를 setAdapter 메소드에 전달할 것입니다.
   
리스트뷰 클래스의 setAdapter 메소드의 원형은 다음과 같습니다.

void  setAdapter(adapter);
 
내부적으로는 ArrayAdapter 객체든 ArrayAdapter 에서 상속받은 객체든 상관없이 모두 사용할수 있는 ListAdapter 인터페이스로 받아서 처리하겠다는 뜻입니다. 즉, 리스트뷰 내부적으로는 ListAdapter를 통해서만 데이터에 접근하겠다는 뜻입니다.
 
자 그럼 실습을 통해서 소스와 동작을 보겠습니다.

프로젝트

Project name : ExamListView
Build Target : Android 2.1
Package name : jsh.exam.listview
Create Activity : main
Min SDK Version : 7


src

main.java

package jsh.exam.listview;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.view.View;
//OnItemClickListener 인터페이스 상속
public class main extends Activity implements OnItemClickListener {
 // 리스트뷰에 보여질 문자열 배열로 할당
 String[] age = new String[] { "10대", "20대", "30대", "40대", "50대" };
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  // 리소스 파일에 정의된 id_list 라는 ID 의 리스트뷰를 얻는다.
  ListView list = (ListView) findViewById(R.id.listView1);
  // ArrayAdapter 객체를 생성한다.
  ArrayAdapter<String> adapter;
  // 리스트뷰가 보여질 아이템 리소스와 문자열 정보를 저장한다
  // 객체명 = new ArrayAdapter<데이터형>(참조할메소드, 보여질아이템리소스, 보여질문자열);
  adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1, age);
  /*
   *
   * 안드로이드에서 제공하는 기본적인 리스트뷰 아이템 리소스
   *
   * simple_list_item_1
   * simple_list_item_2
   * simple_list_item_activated_1
   * simple_list_item_activated_2
   * simple_list_item_checked
   * simple_list_item_multiple_choice
   * simple_list_item_single_choice
   * simple_selectable_list_item
   */
  // 리스트뷰에 ArrayAdapter 객체를 설정하여 리스트뷰에 데이터와 출력 형태를 지정한다.
  list.setAdapter(adapter);
  // 리스트뷰 선택 시 이벤트를 설정한다.
  list.setOnItemClickListener(this);
 }
 // 리스트뷰 선택 시 이벤트 처리 메소드
 @Override
 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
  // TODO Auto-generated method stub
  // arg1는 현재 리스트에 뿌려지고 있는 정보
  // arg2는 현재 리스트에 뿌려지고 있는 해당 id 값
  // 값 출력을 위해 불러온 도구를 id값을 통해 불러옴
  TextView a = (TextView) findViewById(R.id.textView1);
  // 현재 리스트뷰에 있는 해당 값을 보기
  TextView tv = (TextView) arg1;
  // 현재 리스트뷰에 나오는 문자열과 해당 라인의 id값을 확인
  a.setText("선택된 값 : " + tv.getText() + "\n선택된 id값: " + arg2);
 }
}


res


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">
 <TextView
  android:layout_width="wrap_content"
  android:id="@+id/textView1"
  android:text="TextView"
  android:layout_height="wrap_content"
  android:textAppearance="?android:attr/textAppearanceLarge"
  android:layout_gravity="center"></TextView>
 <ListView
  android:layout_height="wrap_content"
  android:id="@+id/listView1"
  android:layout_width="fill_parent"></ListView>
</LinearLayout>


실행결과

 


저작자 표시
신고
Trackback 0 : Comments 3
  1. 바보 2012.11.28 13:01 신고 Modify/Delete Reply

    가로로 4줄로만들고싶은데
    알려주실수있나요

    • 정승현 2012.12.03 12:57 신고 Modify/Delete

      네 충분히 만들수있어여!
      가로 네줄이이면 리스트뷰만들때 커스텀을 해주셔야되요 !
      그럼 한줄에 4개씩인 리스트뷰를 만드실 수 있습니다 .
      오랜만에 들어와서 ~ 답변을 지금 다네여
      커스텀 리스트뷰를 이용하시면 충분히 가능합니다.

  2. 정갈치 2013.04.19 10:23 신고 Modify/Delete Reply

    감사합니다. 많이 배워가네요~~

Write a comment