[Android] ListView를 팝업(AlertDialog)창으로 만들기

안녕하세요 이번에는 리스트뷰를 팝업으로 만드는 방법에 대해서 한번 알아보도록 하겠습니다. 리스트뷰를 팝업창으로 만들어 UI를 구성하시면 좀 더 사용자가 사용하기 편리한 앱을 만들 수 있습니다. 생각보다 굉장히 간단한 방법이니 쉽게 따라 하실 수 있을 것입니다.

 

ListView를 팝업창으로 만들기

바로 예제 소스 올려드리겠습니다.

먼저 팝업창으로 만들 리스트뷰를 간단하게 만들어주도록 하겠습니다.

 

activity_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>

 

MainActivity

package com.example.user.popup_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 MainActivity 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.activity_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);

    }
}

 

위 코드를 붙여 넣으면 아래와 같이 간단한 리스트뷰가 하나 생성됩니다.

 

ListView팝업1

그럼 이제 이렇게 만든 리스트뷰를 팝업창으로 띄우는 방법에 대해서 한번 알아볼게요

AndroidManifest.xml에서 아래 코드를 하나 추가해줍니다.

android:theme="@android:style/Theme.Dialog"

Theme를 Dialog로 만들어주시면 간단하게 팝업 리스트뷰가 완성됩니다.

 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.user.popup_listview">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@android:style/Theme.Dialog">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

ListView팝업2

보시는 바와 같이 리스트뷰가 팝업창 형식으로 잘 만들어졌습니다. 다른 팝업창을 띄우시려면 Manifest에서 테마를 바꿔주시면 됩니다.

댓글

Designed by JB FACTORY