[AndroidStudio] 어댑터뷰 AdapterView (그리드뷰 예제)

chaemin·2022년 12월 13일

안드로이드

목록 보기
7/7

어댑터뷰

  • 그 자체를 사용하기 보다 하위 클래스를 사용한다.
  • 실제로 어댑터뷰를 사용할 때 ➡️
    • 어댑터뷰의 모양을 설정
    • 데이터를 채워주는 ArrayAdapter〈T〉 클래스 같이 사용

AdapterView

  • ListView
  • ExpandableListView
  • GridView
  • Spinner
  • Gallery

뷰컨테이너
뷰그룹 하위 클래스 중 레이아웃을 제외한 것

  • 스크롤뷰, 슬라이딩드로어, 뷰플리퍼 등
  • 어댑터뷰: 그리드뷰, 리스트뷰, 스피너, 갤러리 등

리스트뷰

  • 데이터를 리스트 모양으로 표시
    example: 안드로이드 - [설정]
  • 리스트 중 하나를 선택하는 용도로 사용

XML을 이용한 리스트뷰 만들기
1. 리스트뷰에 나열할 내용을 미리 String 배열로 만든다
2. 리스트뷰 변수 생성 ➡️ XML의 〈ListView〉에 대응
3. ArrayAdapter〈String〉 형의 변수 선언 ➡️ 리스트뷰의 모양과 내용을 1번의 배열로 채움
4. 3번에서 생성한 ArrayAdapter를 2번의 리스트 변수에 적용
5. 리스트뷰의 항목을 클릭했을 대 동작하는 리스너 정의

  • 리스트뷰의 다양한 모양 설정
 	simple_list_item_multiple_choice <!-- 체크박스 -->
 	simple_list_item_single_choice <!-- 라디오버튼 -->
  • 리스트뷰의 동적 추가 및 삭제 - add() / remove()

그리드뷰

그리드뷰는 사진이나 그림을 격자 모양으로 배치한다

  • JAVA 코드에는 필요한 내용을 반드시 코딩해야 한다
  • 속성 중 열 개수를 지정하는 numColumns는 반드시 넣어야 한다
    (행의 개수는 이미지 지정 순 만큼)

예제

MainActivity.java

package com.example.project11_1;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridLayout;
import android.widget.GridView;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("그리드뷰 영화 포스터");

        final GridView gv = (GridView) findViewById(R.id.gridView1);
        MyGridAdapter gridAdapter = new MyGridAdapter(this);
        gv.setAdapter(gridAdapter);
    }

    public class MyGridAdapter extends BaseAdapter {
        Context context;

        public MyGridAdapter(Context c) {
            context = c;
        }
        // 그리드뷰에 보일 이미지의 개수를 반환하도록 수정한다
        public int getCount() {
            return posterId.length;
        }

        public Object getItem(int arg0) {

            return null;
        }

        public long getItemId(int arg0) {

            return 0;
        }

        // 명화 그림 파일의 아이디를 배열로 저장한다
        Integer[] posterId = {
                R.drawable.adelaide, R.drawable.cactus, R.drawable.miseryorlittlebeggar,
                R.drawable.reading, R.drawable.returninghome, R.drawable.rosebouquet,
                R.drawable.summertime, R.drawable.theecho
        };
        String[] posterName = {
                "Adelaid", "Cactus", "Misery or litte beggar", "Reading",
                "Returning Home", "Rose bouquet", "Summer time", "The echo"
        };
        // 그림을 각 그리드뷰의 칸마다 이미지뷰로 생성해서 보여주게 한다
        // 그림 개수 만큼 반복
        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            ImageView imageView = new ImageView(context);
            imageView.setLayoutParams(new GridView.LayoutParams(200, 300));
            imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
            imageView.setPadding(5, 5, 5, 5);

            imageView.setImageResource(posterId[i]);

            final int pos = i;
            imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    View dialogView = (View) View.inflate(MainActivity.this, R.layout.dialog, null);
                    AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
                    ImageView ivPoster = (ImageView) dialogView.findViewById(R.id.ivPoster);
                    ivPoster.setImageResource(posterId[pos]);
                    dlg.setTitle(posterName[pos]);
                    dlg.setIcon(R.drawable.ic_launcher_background);
                    dlg.setView(dialogView);
                    dlg.setNegativeButton("닫기", null);
                    dlg.show();

                }
            });

            return imageView;
        }
    }

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <GridView
        android:id="@+id/gridView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:numColumns="4"/>

</LinearLayout>

dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 그리드뷰의 작은 사진을 클릭하면 큰 사진이 나오는 대화상자용 XML 파일 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <ImageView
        android:id="@+id/ivPoster"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>
profile
창원대학교 컴퓨터공학과 대학원생

0개의 댓글