반응형

글을 작성하기 앞서서 이 모든 글은 [링크] 로부터 복사해 온 것입니다.

설명이 잘 되어 있어서 복사해왔습니다.

 

AutoCompleteTextView 뷰는 드롭다운 리스트를 보여주고, 사용자는 그것들 중 하나를 선택할 수 있습니다. 이 때 클릭 이벤트가 발생하고, 프로그래머는 이를 처리하는 작업을 추가적으로 구현할 수 있습니다. 이것이 바로 이번 포스트의 주제입니다.


 

클릭 이벤트 처리를 하기 위해 필요한 인터페이스 OnItemClickListener

AutoCompleteTextView 뷰의 클릭 이벤트를 처리하기 위해서는 OnItemClickListener 인터페이스가 필요합니다. 그리고 이를 구현하는 클래스 또한 필요하지요. 이 클래스의 객체는 보통 특정한 액티비티 내에서 활용됩니다. 따라서 이 클래스는 액티비티를 구현하는 클래스의 내부에 정의하는 것이 적절합니다. 이 인터페이스는 onItemClick이라는 메소드를 갖습니다. 그것은 AutoCompleteTextView 뷰의 클릭 이벤트가 발생할 때 호출됩니다. 프로그래머는 이 때 처리할 작업을 이 메소드에 구현해 주시면 되겠습니다.


 

onItemClick 메소드의 프로토타입

클릭 이벤트 처리의 구현을 돕기 위해 onItemClick 메소드의 프로토타입을 정리합니다.

 

public void onItemClick(AdapterView<?> parent, View view, int position, long id)

 

이 메소드의 파라메터들은 다음과 같습니다.

 

AdapterView<?> parent

parent는 클릭된 뷰의 부모인 어댑터 뷰입니다.
 

View view

view는 사용자가 클릭한 뷰입니다.

 

int position

안드로이드 개발자 사이트에서 position의 본래 의미는 'The position of the view in the adapter'입니다. 그러나 실제로는 드롭다운 리스트에서 선택된 뷰의 위치임을 확인했습니다.

 

long id

개발자 사이트에 의하면 id의 본래 의미는 'The row id of the item that was clicked.'입니다. 사용자가 단어를 입력하면, 그것으로 시작되는 항목들이 드롭다운 리스트에 뜹니다. 그 중에 선택된 것이 리스트의 몇번째 위치인지를 id는 의미합니다. 현 시점에서는 id와 position이 동일한 값을 갖는 것으로 보입니다.


 

AutoCompleteTextView 뷰의 클릭 이벤트 처리를 구현하는 과정

1. 먼저 AutoCompleteTextView 뷰와 그것의 어댑터를 정의하세요. 이 방법은 아래 링크를 참고하시기 바랍니다.

 

 

2. OnItemClickListener 인터페이스를 구현하는 클래스를 정의하세요. 두 가지 방법 중 하나를 고려할 수 있습니다.

 

1번째 방법은 액티비티 클래스 내에 별도 클래스를 정의하는 것입니다. 아래 코드는 그 예입니다.

 

public class ActivityExample extends Activity

{

    // ...

    private class AutoCompleteTextViewExampleClickListener implements OnItemClickListener

    {

        public void onItemClick(AdapterView<?> adapter, View clickedView, int position, long id)

        {

        }

    }

}

 

2번째 방법은 액티비티 클래스 내에 익명 클래스를 정의하는 것입니다. 익명 클래스는 말 그대로 클래스의 이름을 지을 필요가 없지요. 그런 점에서 구현하기가 더 편리하다고 볼 수 있지요. 아래 코드는 그 예를 보여줍니다.

 

OnItemClickListener autoCompleteTextViewExampleClickListener = new OnItemClickListener()

{

    public void onItemClick(AdapterView<?> adapter, View clickedView, int position, long id)

    {

    }

};

 

3. 2에서 정의한 클래스의 onItemClick 메소드를 구현하세요. 여기에서는 간단하게 토스트를 띄우는 코드만 작성해 보겠습니다.

 

public void onItemClick(AdapterView<?> adapter, View clickedView, int position, long id)

{

    String toastMessage = (TextView)clickedView.getText().toString() + " is selected. position is " + position + ", and id is " + id;

    Toast.makeText(getApplicationContext(), toastMessage, Toast.LENGTH_SHORT).show();

}


4. 2, 3을 통해 정의된 클래스를 이용하여 아이템 클릭 리스너를 정의하세요. 익명 클래스로 정의한 경우에는 이미 객체가 정의되었으므로 4로 넘어 가세요.

 

AutoCompleteTextViewExampleClickListener autoCompleteTextViewExampleClickListener = new AutoCompleteTextViewExampleClickListener();

 

코드가 참 길죠. 그래서 익명 클래스를 정의하는 것이 좀 더 편리합니다. 다만 이것을 어떤 메소드 내에 정의한다면, 그것이 길어진다는 점을 유의할 필요가 있겠지요.

 

5. 앞에서 정의된 리스너를 AutoCompleteTextView 뷰의 아이템 클릭 리스너로 등록하세요. 이것은 그 뷰의 setOnItemClickListener 메소드를 호출하여 처리됩니다. 앞에서 정의한 리스너를 이 메소드의 파라메터로 대입하시면 되겠습니다. 이 뷰의 이름이 autoCompleteTextViewExample이고 리스너의 이름이 autoCompleteTextViewExampleClickListener이라고 가정해 봅시다. 그러면 코드는 아래와 같이 작성하실 수 있습니다.

 

autoCompleteTextViewExample.setOnItemClickListener(autoCompleteTextViewExampleClickListener);


 

지금까지 보여드린 과정을 반영한 예를 보여 드리겠습니다. 프로젝트 이름은 HandlingActViewItemClick입니다. 먼저 실행 결과를 보시죠. (프로젝트 이름이 너무 길어 AutoCompleteText를 Act로 줄여 적었습니다.)

 

실행 결과

예의 초기 화면입니다.

 


 

화면에 보이는 AutoCompleteTextView 뷰를 터치하고 'b'를 입력해 볼께요. 그러면 이 뷰의 드롭다운 리스트는 아래 그림과 같이 나타납니다.

 


 

B로 시작되는 이름들이 보이시죠? 그것들 중 하나를 선택해 보겠습니다.

 

 

항목 선택 후 토스트가 출력됨을 확인하실 수 있습니다. 이제 이 앱이 어떻게 구현되었는지 코드를 보겠습니다.

 

main.xml

위 그림처럼 화면을 구성하기 위해 이 파일에 AutoCompleteTextView 뷰를 정의하였습니다. 그리고 1글자만 입력해도 드롭다운 리스트를 뷰가 보여주기 위해 completionThreshold 속성의 값을 1로 설정하였습니다. 

  

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


    <AutoCompleteTextView
        android:id="@+id/autoCompleteTextViewExample"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:completionThreshold="1"
        android:text="" />

 

</LinearLayout>

 

strings.xml

드롭다운 리스트가 보여줄 이름들은 이 파일의 문자열 배열 내에 저장하였습니다. 이 배열은 string-array 태그로 정의되었습니다.

 

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="hello">Hello World, HandlingActViewItemClickActivity!</string>
    <string name="app_name">HandlingActViewItemClick</string>
   
    <string-array name="str_names">
        <item> Amy </item>
        <item> Alicia </item>
        <item> Aran </item>
        <item> Baderon </item>
        <item> Bruce </item>
        <item> Bryce </item>
        <item> Charles </item>
        <item> Cynewyn </item>
        <item> Elyzabeth </item>
        <item> German </item>
        <item> Gerbold </item>
        <item> Michael </item>
    </string-array>

 

</resources>

 

HandlingActViewItemClickActivity.java

AutoCompletionTextView 뷰의 항목 클릭 이벤트는 이 파일에서 처리 됩니다. 이를 담당하는 리스너가 익명 클래스로 정의되었습니다.

 

package me.blog.netrance.example.handling_actview_item_click;

 

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.TextView;
import android.widget.Toast;

 

public class HandlingActViewItemClickActivity extends Activity {
   
    OnItemClickListener clickListener4ActViewExample = new OnItemClickListener()
    {
        public void onItemClick(AdapterView<?> adapterView, View clickedView, int position, long id)
        {
            String toastMessage = ((TextView)clickedView).getText().toString() + " is selected. position is " + position + ", and id is " + id;
            Toast.makeText(getApplicationContext(), toastMessage, Toast.LENGTH_SHORT).show();
        }
    };
   
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        //-----------------------------------------------------------
       
        AutoCompleteTextView autoCompleteTextViewExample = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextViewExample);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                getApplicationContext(),
                R.array.str_names,
                android.R.layout.simple_dropdown_item_1line);
       
        autoCompleteTextViewExample.setAdapter(adapter);
        autoCompleteTextViewExample.setOnItemClickListener(clickListener4ActViewExample);
    }
}

 

이 앱을 구현한 프로젝트는 첨부 파일로 올리오니 참고 하세요.

 

 

마치며...

지금까지 AutoCompleteTextView 뷰의 항목 클릭 이벤트를 처리하는 방법에 대해 정리해 보았습니다. ListView 뷰에서도 동일한 이벤트를 처리할 수 있습니다. 따라서 이 포스트의 내용을 이해하시면, ListView 뷰를 구현하는 방법도 어렵지 않을 것입니다.

 

[출처] [안드로이드] AutoCompleteTextView 뷰의 항목 클릭 이벤트 처리 방법|작성자 도리안

반응형

+ Recent posts