이 튜토리얼에서는 안드로이드 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에 정상적으로 나타납니다.