본문 바로가기

Android

Android] ListView 구현해보기

리스트 뷰 -  사용자가 정의한 데이터 목록을 나열하여 화면에 표시하는 뷰 그룹의 한 종류


리스트 뷰 사용 예제)

 

1. activity_main.xml

   ㄴ 화면에 보여지는 xml 생성

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

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="리스트 뷰"
        android:textSize="30dp"/>
    <ListView
        android:id="@+id/list_View"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</LinearLayout>

2. item_list.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="wrap_content"
    android:orientation="horizontal">
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:id="@+id/titleText"
            android:text="1번"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1번"
            android:id="@+id/btn1"
            android:gravity="center"/>
    </LinearLayout>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1번 내용"
        android:layout_marginStart="20dp"
        android:id="@+id/contentText"
        android:layout_gravity="center"/>

</LinearLayout>

 

3. MainActivity.java

package com.example.listview;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;


public class MainActivity extends AppCompatActivity {
    private ListView list;
    String Title[] = {"제목1","제목2","제목3","제목4"}; //리스트 뷰의 title부분
    String Content[]={"내용1","내용2","내용3","내용4"}; //리스트 뷰의 content부분
    String BtnNum[]={"버튼1","버튼2","버튼3","버튼4"};  //리스트 뷰의 button의 text설정

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        list = (ListView)findViewById(R.id.list_View);

        MyAdapter adapter = new MyAdapter(this,Title,Content,BtnNum);
        list.setAdapter(adapter);//리스트 어댑터 설정

    }

    //MyAdapter 설정
    class MyAdapter extends ArrayAdapter<String>{

        Context context;
        String titleR[];
        String contentR[];
        String btnR[];

        MyAdapter(Context context, String title[], String content[], String btn[]) {
            super(context,R.layout.item_list,R.id.titleText,title);
            this.context = context;
            this.titleR = title;
            this.contentR = content;
            this.btnR = btn;
        }
        public View getView(int position,@Nullable View convertView,@NonNull ViewGroup parent){
            //item_list.xml파일을 객체화 하기 위해 LayoutInflater 사용
            LayoutInflater layoutInflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View item_list =layoutInflater.inflate(R.layout.item_list,parent,false);


            //xml에서 지정한 Ui요소 사용
            Button button = item_list.findViewById(R.id.btn1);
            TextView textView = item_list.findViewById(R.id.titleText);
            TextView textView2 = item_list.findViewById(R.id.contentText);

            button.setText(btnR[position]);
            textView.setText(titleR[position]);
            textView2.setText(contentR[position]);

            //버튼1을 클릭했을 때 이벤트 처리
            if(button.getText()=="버튼1"){
                button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intent = new Intent(getApplicationContext(),Btn1Activity.class);
                        startActivity(intent);
                    }
                });
            }
            //버튼2를 클릭했을 때 이벤트 처리
            else if(button.getText()=="버튼2"){
                button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intent = new Intent(getApplicationContext(),Btn2Activity.class);
                        startActivity(intent);
                    }
                });
            }
            //버튼3을 클릭했을 때 이벤트 처리
            else if(button.getText()=="버튼3"){
                button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intent = new Intent(getApplicationContext(),Btn3Activity.class);
                        startActivity(intent);
                    }
                });
            }
            //버튼4를 클릭했을 때 이벤트 처리
            else if(button.getText()=="버튼4"){
                button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intent = new Intent(getApplicationContext(),Btn4Activity.class);
                        startActivity(intent);
                    }
                });
            }

            return item_list;
        }
    }

}

#어댑터 - 데이터를 받아서 관리하고 어댑터 뷰에 출력할 수 있는 형태로 데이터를 제공하는 객체

                (위에서는 어댑터 뷰의 서브클래스인 리스트 뷰로 데이터 출력)

 

4. activity_btn1~4

<?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">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30dp"
        android:text="버튼1 액티비티"/>

</LinearLayout>

버튼 1~4의 클릭시 출력되는 activity xml 생성

 

5. Btn1~4Activity.java

package com.example.listview;

import android.os.Bundle;
import android.widget.ListView;

import androidx.appcompat.app.AppCompatActivity;

public class Btn1Activity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_btn1);

    }
}

6. AndroidManifest.xml

<activity android:name=".Btn1Activity"/>
<activity android:name=".Btn2Activity"/>
<activity android:name=".Btn3Activity"/>
<activity android:name=".Btn4Activity"/>

매니페스트에 액티비티 추가


실행화면

버튼 1 클릭 시



Calendar
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
더보기
Archives
Visits
Today
Yesterday