'안드로이드 리스트뷰'에 해당되는 글 2건

  1. 2013.01.29 Android - 리스트뷰에 스피너 형태 달기 (ListView Spinner) (6)
  2. 2011.10.18 Android - ListView ( 리스트뷰 ) (3)

Android - 리스트뷰에 스피너 형태 달기 (ListView Spinner)

Android 2013.01.29 00:26

안녕하세요 오늘만 두번째 글이네요.

아니 하루가 지났으니 오늘 첫번째 글이 되는건가요.

 

어떤분이 리스트뷰에 스피너처럼 뛰울 수는 없는가 해서 제가 한번 해보았습니다.

리스트뷰에 동적으로 스피너를 구현해보았지만 모습이 영.........아니더라구요 ㅎ

그래서 생각한방법이 다이얼로그를 스피너형태처럼 뛰우는 형식을 썼습니다.

 

 

오랜만에 이리저리 소스만지다보니 헤매다가 예전 자료 찾아서 쓱싹 해치웠네요 ㅎ

그 분에게 도움이 될지는 모르겠지만 제가 한 방법을 소개하겠습니다.

 

 

현재 리스트뷰 구현 방법은 전 글을 찾아보시면 쉽게 해보실 수 있구요.

그 구현 소스에 간단히 다이얼로그 생성 소스만 갖다 붙힌 걸로 쉽게 구현할 수 있었습니다.

다이얼로그를 따로 메소드를 만들어서 하시는 분들도 있지만 저는 리스트뷰 클릭 동시에 다이얼로그를 생성하는 방식으로 구현했습니다.

 

 

방법은 아래와 같습니다.

 

먼저 각 행에 뿌려줄 문자값을 배열로 지정합니다.

String[] Example = new String[]{"깡통" ,"중옵" ,"풀옵"};
  
다이얼로그객체생성
 new AlertDialog.Builder(this)

 

타이틀은 없애구요
.setTitle("")
 

아이템에 넣어줄 것은 뿌려줄 문자값과 클릭 시 이벤트 처리입니다.

.setItems(Example, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
이 부분에 int 값으로 이벤트처리 하시면 됩니다 !

     }
})

 

버튼은 당연히 스피너인데 없어야겠지요.
 .setNegativeButton("", null)
.show();

 

 

이 구문을 추가함으로써 리스트뷰를 클릭 시 스피너 형태처럼 구현할 수 있도록 하였습니다.

다이얼로그 생성 구문을 알아두면 어디든 써먹을 수 있다는 장점이 있습니다. 여러분도 메모장 같은 곳에 적어두고 잘 써먹으시길 바라겠습니다.

이제 소스와 실행화면으로 맞치겠습니다.

필요한 설명은 주석으로 달아놓았습니다. 그 외의 질문은 댓글로 !!!!

 

 

프로젝트 생성

 

프로젝트명 : com.jsh.examlistspiner

클래스파일 : ListviewSpiner

XML파일 : main.xml

타겟 : 2.2 ~ 4.2

 

 

 

ListviewSpinner.java

 

ListviewSpiner.txt

 

package com.example.com.jsh.examlistspiner;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.RelativeLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.view.View;

//OnItemClickListener 인터페이스 상속
public class ListviewSpinner extends Activity implements OnItemClickListener {

// 리스트뷰에 보여질 문자열 배열로 할당
String[] age = new String[] { "아방", "슴삼", "아써", "크삼" };

/** 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 값

// 다이얼로그에 보여질 내용
String[] Example = new String[] { "깡통", "중옵", "풀옵" };

// 다이얼로그 생성
new AlertDialog.Builder(this).setTitle("")
.setItems(Example, new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub

// int 값으로 switch문으로 분기 치면 됩니다.

}
}).setNegativeButton("", null).show();

}

}

 

 

main.xml

 

main.txt

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/layout"
    tools:context=".ListviewSpiner" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
       >
    </ListView>

</RelativeLayout>

 

 

 

실행화면

 

 

 

 

 

 

 

이런식으로 리스트뷰 클릭 시

스피너 형태로 구현되도록 하였습니다.

 

많이 찾아주세요.

 

 

 

 

저작자 표시
신고
Trackback 0 : Comments 6
  1. ssima 2013.01.29 09:09 신고 Modify/Delete Reply

    잘 보고가요! 덕분에 많은 도움이 되었습니다. 감사합니다. 정님!! -씨마 올림-

  2. wooruang 2013.02.18 22:50 신고 Modify/Delete Reply

    딱 필요했던 부분인데 잘보고 갑니다 감사함니다~^^

  3. 질문 2013.02.28 14:25 신고 Modify/Delete Reply

    처음 리스트 에서......깡통, 중옵, 풀옵 이 나올때....
    짧게 클릭인가요?? 길게 클릭인가요??
    혹시 짧게 클릭햇을때...... 다른 엑티비티(다른 화면) 으로 넘어가게 할 수 있나요??
    (예시 : 카톡의 설정화면에서 각 해당 아이템 클릭시 화면이동....)
    혹시..... 샘플 있으신가요?? 있으시면 메일로좀 부탁드립니다.
    test000@hanmail.net 로 부탁드립니다......

    • 정승현 2013.02.28 21:15 신고 Modify/Delete

      현재 보시는 소스에서 inItemClick 메소드에서 int arg1 부분의 arg1을 통해서 분기쳐서 다른 액티비티로 넘기시면 됩니다.

Write a comment


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