본문 바로가기
안드로이드

안드로이드 - 리스트뷰에 버튼넣기

by Dokon Jang 2015. 4. 28.
반응형

리스트뷰를 구현할때 리스트 아이템에 버튼 등의 컴포넌트가 필요 할 경우가 발생합니다.

그리고 리스트뷰에 OnItemClickListener를 구현하여 이벤트 처리를 합니다.

리스트뷰의 OnItemClick 이벤트와 함께 리스트뷰 아이템의 버튼 클릭 이벤트도 함께 처리하기 위한 방법을 소개합니다.

 

1. 리스트뷰 아이템 Layout에 버튼을 추가합니다.

 - Layout XML에서 버튼은 코드 라인 21~25입니다.

<?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"
    android:gravity="center_vertical">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/textView"
        android:layout_weight="1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        android:id="@+id/button" />

</LinearLayout>
 
 
2. 

2.리스트뷰의 커스텀 어뎁터에 버튼의 이벤트를 추가합니다.

  - 버튼의 이벤트 관련 코드는 라인번호 20~27입니다.

    private class CustomAdapter extends ArrayAdapter<String> {
        private ArrayList<String> items;

        public CustomAdapter(Context context, int textViewResourceId, ArrayList<String> objects) {
            super(context, textViewResourceId, objects);
            this.items = objects;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.listview_item, null);
            }

            ImageView imageView = (ImageView)v.findViewById(R.id.imageView);
            TextView textView = (TextView)v.findViewById(R.id.textView);
            textView.setText(items.get(position));

            final String text = items.get(position);
            Button button = (Button)v.findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
                }
            });

            return v;
        }
    }
 

 

3. 아래의 이미지는 실행한 결과입니다.

  - 리스트뷰의 아이템에 있는 버튼을 터치하면 메세지(Toast)가 표시됩니다.

  - 리스트뷰에 OnItemClick 이벤트를 구현했으며 버튼 이외의 영역을 터치하면 OnItemClick 이벤트가 실행됩니다.

 

반응형

댓글