item1.xml layout파일을 ListView에 붙이고, 이벤트 추가 하기.
- 버튼을 누르면 Toast를 이용해서 이미지내용을 보여준다.

(1) activity_main.xml
; ListView하나만 붙인다.
<RelativeLayout xmlns:android="
http://schemas.android.com/apk/res/android"
xmlns:tools="
http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
</ListView>
</RelativeLayout>
(2) item1.xml
; ImageView , TextView, Button을 붙인 layout을 만든다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="
http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="70dp"
android:padding="10dp">
<ImageView android:id="@+id/img"
android:src="@drawable/ic_launcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:adjustViewBounds="true"/>
<TextView android:id="@+id/txt"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:textSize="20sp"
android:paddingLeft="10dp"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/img"
android:text="test"/>
<Button android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="주문"/>
</RelativeLayout>
(3) MainActivity.java
package com.example.test13_listview;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ListView;
public class MainActivity extends Activity {
ListView listView;
ArrayList<MyItem> list=new ArrayList<MyItem>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(ListView)findViewById(R.id.listView1);
//배열에 값 저장하기
list.add(new MyItem(R.drawable.bird,"예쁜새"));
list.add(new MyItem(R.drawable.boy,"소년그림"));
list.add(new MyItem(R.drawable.coffe,"맛있는커피"));
list.add(new MyItem(R.drawable.fruit,"맛있는과일"));
//어댑터 만들기
MyListAdapter adapter=new MyListAdapter(this,R.layout.item1, list);
//리스트뷰와 어댑터 연결하기
listView.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
(4) MyListAdapter.java
convertView : 안드로이드가 전달해주는 해당리스트 항목 뷰
뷰가 스크롤할때마다 생성해서 보여주면 자원의 효율성에서 문제가 있으므로 생성된 뷰 정보를 가지고 있다가 다시 보여주면 getView에서 이 뷰를 리턴하는데 이것이 convertView이다.
처음보일때는 생성된 것이 없으므로 null이지만 이미 보여진 내용을 스크롤해서 다시 보여지면 이때는 null이 아니다.
package com.example.test13_listview;
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
// 사용자 정의 어댑터 클래스 만들기
// 어댑터(데이터(모델)+보여줄형식(레이아웃))
public class MyListAdapter extends BaseAdapter{
private Context context;
private int layoutId;
private ArrayList<MyItem> list;
private LayoutInflater inflater;//레이아웃 xml파일을 자바객체로 변환하기 위한객체
/**
*
* @param context : 컨텍스트
* @param layoutId : 보여줄 레이아웃
* @param list : 보여줄 데이터를 갖고있는 배열
*/
public MyListAdapter(Context context,int layoutId,ArrayList<MyItem> list) {
this.context=context;
this.layoutId=layoutId;
this.list=list;
//LayoutInflater 객체 얻어오기(레이아웃xml파일을 자바객체로 변환하기 위해서)
inflater=
(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
//항목의 갯수 반환
@Override
public int getCount() {
return list.size();
}
//position에 해당하는 항목 반환
@Override
public Object getItem(int position) {
return list.get(position);
}
//항목에 해당하는 아이디 반환
@Override
public long getItemId(int position) {
return position;
}
//각 항목뷰+에 어떻게 보여질지를 정의
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null){//항목뷰가 한번도 보여진적이 없는 경우
//레이아웃(item1.xml)을 자바객체로 변환하기
convertView=inflater.inflate(layoutId,parent,false);
}
////// convertView에 어떻게 보여질지 설정 ////////////
//텍스트뷰에 제품명 넣기
TextView txt=(TextView)convertView.findViewById(R.id.txt);
final MyItem item=list.get(position);
txt.setText(item.getItemName());
//이미지뷰에 제품이미지 넣기
ImageView img=(ImageView)convertView.findViewById(R.id.img);
img.setImageResource(item.getIconID());
//버튼을 눌렀을때 선택된 제품명 출력하기
Button btn=(Button)convertView.findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name=item.getItemName();
//토스트로 출력하기
Toast.makeText(context,"선택된 제품:"+ name,Toast.LENGTH_SHORT).show();
}
});
////////////////////////////////////////////////////////////
return convertView;
}
}
(5) MyItem.java
package com.example.test13_listview;
public class MyItem {
private int iconID;//아이콘 리소스 아이디 저장(이미지)
private String itemName;//텍스트뷰에 보여질 제품명
public MyItem() {
// TODO Auto-generated constructor stub
}
public MyItem(int iconID,String itemName){
this.iconID=iconID;
this.itemName=itemName;
}
public int getIconID() {
return iconID;
}
public void setIconID(int iconID) {
this.iconID = iconID;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
}