자 오늘은 저번에 했던 리스트 뷰(ListView)에서 각각의 클릭 이벤트를 설정 하는 방법에 대해 알아보겠습니다.
오늘의 목표로는 해당 영역에 클릭 이벤트를 달아서 각 리스트에 해당하는 정보를 전달하도록 하는 방법을 알려드리겠습니다.
우선 이전 글을 참고하시면 어댑터를 이용한 리스트 뷰 구현 방법이 있습니다.
xml 설정 |
해당 xml에서 클릭 이벤트를 지정할 곳에 id 를 설정합니다.
저 같은 경우는 LinearLayout 자체에 클릭 이벤트를 달기 위해 해당 레이아웃에 id 설정을 "cmdArea"로 했습니다.
<LinearLayout
android:id="@+id/cmdArea"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:background="@drawable/corner_shape">
...
이벤트 관련 소스 코드 추가 |
그리고 이벤트 구현은 이전 글을 보시면 ListViewAdapter에 구현을 하였습니다.
우선 ListViewAdapter에 이벤트를 위해 다음과 같은 코드를 추가합니다.
LinearLayout cmdArea= (LinearLayout)convertView.findViewById(R.id.cmdArea);
cmdArea.setOnClickListener(new View.OnClickListener() {
public void onClick(View v){
//해당 리스트 클릭시 이벤트
Toast.makeText(v.getContext(), listViewItemList.get(pos).getContent(), Toast.LENGTH_SHORT).show();
}
});
listViewItemList.get(pos).getContent();
이 부분을 보시면 클릭시 해당 리스트위 위치의 내용을 가져와 Toast 메세지로 표시를 합니다.
아래는 전체 소스입니다.
ListViewAdapter
public class ListViewAdapter extends BaseAdapter {
private ImageView iconImageView;
private TextView titleTextView;
private TextView contentTextView;
// Adapter에 추가된 데이터를 저장하기 위한 ArrayList
private ArrayList<ListViewItem> listViewItemList = new ArrayList<ListViewItem>();
// ListViewAdapter의 생성자
public ListViewAdapter() {
}
// Adapter에 사용되는 데이터의 개수를 리턴
@Override
public int getCount() {
return listViewItemList.size();
}
// position에 위치한 데이터를 화면에 출력하는데 사용될 View를 리턴
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
final Context context = parent.getContext();
// "listview_item" Layout을 inflate하여 convertView 참조 획득.
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.listview_item, parent, false);
}
// 화면에 표시될 View(Layout이 inflate된)으로부터 위젯에 대한 참조 획득
titleTextView = (TextView) convertView.findViewById(R.id.title);
iconImageView = (ImageView) convertView.findViewById(R.id.icon);
contentTextView = (TextView) convertView.findViewById(R.id.content);
ListViewItem listViewItem = listViewItemList.get(position);
// 아이템 내 각 위젯에 데이터 반영
titleTextView.setText(listViewItem.getTitle());
iconImageView.setImageResource(listViewItem.getIcon());
contentTextView.setText(listViewItem.getContent());
LinearLayout cmdArea= (LinearLayout)convertView.findViewById(R.id.cmdArea);
cmdArea.setOnClickListener(new View.OnClickListener() {
public void onClick(View v){
//해당 리스트 클릭시 이벤트
Toast.makeText(v.getContext(), listViewItemList.get(pos).getContent(), Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
// 지정한 위치(position)에 있는 데이터와 관계된 아이템(row)의 ID를 리턴
@Override
public long getItemId(int position) {
return position;
}
// 지정한 위치(position)에 있는 데이터 리턴
@Override
public Object getItem(int position) {
return listViewItemList.get(position);
}
// 아이템 데이터 추가를 위한 함수.
public void addItem(String title, int icon, String content) {
ListViewItem item = new ListViewItem();
item.setTitle(title);
item.setIcon(icon);
item.setContent(content);
listViewItemList.add(item);
}
}
동작 확인 |
이벤트가 정상적으로 동작하는지 확인 해봅니다.
해당 영역 클릭시 리스트의 content 내용이 정상적으로 나옵니다.
마찬가지로 아래의 리스트들을 클릭 해보면 해당 리스트의 내용 값이 Toast 메세지로 표시되는것을 확인할 수 있습니다.
이상입니다 감사합니다.
'프로그래밍 > 안드로이드[Android]' 카테고리의 다른 글
[Firebase] Firebase 처음 시작하기[안드로이드에 푸시 알림] (0) | 2019.06.14 |
---|---|
[안드로이드] AlertDialog 메시지 창 간단 사용방법 (0) | 2019.06.04 |
안드로이드 화면 전환시 데이터전달하기 [액티비티간 데이터 전달] (0) | 2019.05.28 |
[안드로이드] 안드로이드 폴더 그룹화[패키지화]로 관리하기 (0) | 2019.05.27 |
[안드로이드] 안드로이드 스튜디오 외부 플러그인 설치방법! (0) | 2019.05.27 |