Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

안드로이드 ListView에서 배열 간 공통 요소를 찾는 방법

이 튜토리얼에서는 안드로이드 ListView에서 두 배열 사이의 공통 요소를 찾아 화면에 출력하는 방법을 단계별로 살펴봅니다.

1단계 — 새 프로젝트 만들기

Android Studio를 실행한 뒤 File → New Project 메뉴로 이동하고, 프로젝트 생성에 필요한 정보를 모두 입력해 새 프로젝트를 만듭니다.

2단계 — 레이아웃 파일 수정

res/layout/activity_main.xml 파일에 다음 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_marginTop="30dp"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </ListView>

</LinearLayout>

위 레이아웃에서는 배열의 값을 화면에 나타내기 위해 ListView 위젯을 사용했습니다.

3단계 — MainActivity 코드 작성

src/MainActivity.java 파일에 다음 코드를 추가합니다.

package com.example.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    ListView list;
    String[] names = new String[] { "A", "B", "C" };
    String[] extended = new String[5];

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

        extended[3] = "D";
        extended[4] = "E";

        // names 배열 전체를 extended 배열의 앞부분으로 복사
        System.arraycopy(names, 0, extended, 0, names.length);

        ArrayList<String> unique = new ArrayList<>();
        for(int i = 0; i < names.length; i++) {
            for(int j = 0; j < extended.length; j++) {
                if(names[i] == extended[j]) {
                    unique.add(names[i]);
                }
            }
        }

        ArrayAdapter adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, unique);
        list.setAdapter(adapter);
    }
}

코드 동작 원리

먼저 요소 3개를 가진 names 배열과 크기가 5인 extended 배열을 선언합니다. extended 배열의 마지막 두 칸에는 "D"와 "E"를 넣고, System.arraycopy()를 사용해 names 배열의 내용을 extended 배열의 앞부분으로 복사합니다. 이렇게 하면 두 배열은 일부분을 공유하게 됩니다. 이후 이중 for 문으로 두 배열의 모든 요소를 서로 비교하여 공통으로 존재하는 값만 unique 리스트에 담고, 이를 ArrayAdapter에 연결해 ListView에 표시합니다.

개발자 팁: 문자열을 비교할 때는 == 연산자보다 equals() 메서드를 사용하는 것이 안전합니다. ==는 객체의 참조 주소를 비교하므로, 문자열 리터럴이 아닌 경우 의도하지 않은 결과가 나올 수 있습니다. 따라서 names[i].equals(extended[j]) 형태로 작성하는 것을 권장합니다.

애플리케이션 실행하기

이제 애플리케이션을 실행해 보겠습니다. 실제 Android 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run 아이콘을 클릭하세요. 목록에서 자신의 모바일 기기를 선택하면, 기기의 기본 화면에 아래와 같은 결과가 표시됩니다.

안드로이드 ListView에서 배열 간 공통 요소를 찾는 방법

위 실행 결과에서 볼 수 있듯이, 두 배열에 공통으로 포함된 요소들이 ListView에 정상적으로 나타납니다.