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

안드로이드 ListView에서 롱클릭(Long Click) 리스너 구현하는 방법

이 예제는 안드로이드 ListView에서 아이템을 길게 눌렀을 때(롱클릭) 동작하는 리스너를 구현하는 방법을 단계별로 설명합니다.

1단계 – 새 프로젝트 생성

Android Studio를 실행한 뒤, 메뉴에서 File ⇒ New Project를 선택하고 새 프로젝트 생성에 필요한 모든 정보를 입력하여 프로젝트를 만듭니다.

2단계 – 레이아웃 파일 작성

res/layout/activity_main.xml 파일에 아래 코드를 추가합니다. 화면 전체를 차지하는 ListView 하나를 배치하는 가장 기본적인 구조입니다.

<?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"
    tools:context=".MainActivity">
    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

3단계 – MainActivity에 롱클릭 리스너 구현

src/MainActivity.java 파일에 아래 코드를 추가합니다. 핵심은 setOnItemLongClickListener() 메서드입니다. 리스트의 아이템을 길게 누르면 onItemLongClick() 콜백이 호출되고, 여기서 토스트 메시지를 표시하도록 처리했습니다.

package app.com.sample;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
    String[] mobileArray = {"Android", "IPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView listView = findViewById(R.id.listView);
        ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mobileArray);
        listView.setAdapter(adapter);
        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long id) {
                Toast.makeText(getApplicationContext(), "long clicked", Toast.LENGTH_SHORT).show();
                return true;
            }
        });
    }
}

참고: onItemLongClick()에서 true를 반환하면 해당 이벤트가 여기서 처리되었음을 의미하며, 이후 일반 클릭 이벤트까지 연달아 발생하지 않습니다. 반면 false를 반환하면 롱클릭 후 클릭 이벤트도 함께 실행될 수 있으니 상황에 맞게 반환값을 지정하세요.

4단계 – 매니페스트 확인

androidManifest.xml 파일에 아래와 같이 MainActivity가 정상적으로 등록되어 있는지 확인합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <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="@style/AppTheme">
        <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>

앱 실행 및 결과 확인

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

안드로이드 ListView에서 롱클릭(Long Click) 리스너 구현하는 방법

리스트의 아이템을 길게 누르면 화면 하단에 "long clicked"라는 토스트 메시지가 나타나는 것을 확인할 수 있습니다. 이 방식을 응용하면 컨텍스트 메뉴 표시, 항목 삭제, 편집 모드 진입 등 다양한 UX를 손쉽게 구현할 수 있습니다.