반응형
리스트뷰를 구현할때 리스트 아이템에 버튼 등의 컴포넌트가 필요 할 경우가 발생합니다.
그리고 리스트뷰에 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 이벤트가 실행됩니다.
반응형
'안드로이드' 카테고리의 다른 글
안드로이드 - 텍스트뷰(TextView) 긴 문장 흐르게 처리하기 (0) | 2015.05.11 |
---|---|
안드로이드 - 텍스트뷰(TextView)에 긴 문장의 줄임(..) 표시 (0) | 2015.05.11 |
안드로이드 - 도움말 파일(CHM) (0) | 2015.04.25 |
안드로이드 - 인터넷에 있는 이미지 Bitmap으로 만들기 (0) | 2015.04.24 |
안드로이드 - 커스텀 리스트뷰(ListView) 만들기 (1) | 2015.04.24 |
댓글