태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

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

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

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


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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?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>
 
cs


2. 

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    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;
        }
    }
 
cs


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

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

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


블로그 이미지

Dokon Jang

댓글을 달아 주세요