Upload
luke-lambert
View
237
Download
9
Embed Size (px)
Citation preview
로봇 전화번호부 4/4UNIT
12
로봇 SW 콘텐츠 교육원조용수
2학습 목표
• 뷰 홀더 패턴을 사용할 수 있다 .• 토스트를 사용할 수 있다 .• 클릭 이벤트를 처리할 수 있다 .
미션3
너무 많은 아이템4
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
ListView listview = (ListView)findViewById(R.id.list);
for(int i = 0; i < 100; ++i) { phones.add(new PhoneInfo(R.drawable.boy, " 갑돌이 " + i, "010-1234-5678")); phones.add(new PhoneInfo(R.drawable.boy, " 갑순이 " + i, "010-5678-1234")); } …}
뷰 홀더 패턴5
private class ViewHolder { ImageView icon; TextView name; TextView phone; ImageView call; }
• Widget 할당 부분을 Tag 에 저장하여 , 초기화 시간을 줄이는 방법
뷰 홀더 패턴6
private class PhoneListAdapter extends ArrayAdapter<PhoneInfo>{ ......
@Override public View getView(int position, View convertView, ViewGroup parent) { @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView == null) { holder = new ViewHolder(); convertView = inflater.inflate(R.layout.listitem, null); convertView.setTag(holder); } else { holder = (ViewHolder)convertView.getTag(); }
… return convertView;}
}
뷰 홀더 패턴7
private class PhoneListAdapter extends ArrayAdapter<PhoneInfo>{ ......
@Override public View getView(int position, View convertView, ViewGroup parent) { @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView == null) { holder = new ViewHolder(); convertView = inflater.inflate(R.layout.listitem, null); holder.icon = (ImageView)convertView.findViewById(R.id.ivProfile); holder.call = (ImageView)convertView.findViewById(R.id.ivPhone); holder.name = (TextView)convertView.findViewById(R.id.tvText1); holder.phone = (TextView)convertView.findViewById(R.id.tvText0); convertView.setTag(holder); } else { holder = (ViewHolder)convertView.getTag(); } PhoneInfo info = (PhoneInfo)getItem(position); holder.name.setText(info.name); holder.phone.setText(info.phone); holder.icon.setImageResource(info.icon); return convertView; } }
실습8
버튼 이벤트9
private class ViewHolder { ImageView icon; TextView name; TextView phone; ImageView call; }
버튼 이벤트10
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView == null) { holder = new ViewHolder(); convertView = inflater.inflate(R.layout.listitem, null); holder.icon = (ImageView)convertView.findViewById(R.id.ivProfile); holder.call = (ImageView)convertView.findViewById(R.id.ivPhone); holder.name = (TextView)convertView.findViewById(R.id.tvText1); holder.phone = (TextView)convertView.findViewById(R.id.tvText0); convertView.setTag(holder); } else { holder = (ViewHolder)convertView.getTag(); } PhoneInfo info = (PhoneInfo)getItem(position); holder.name.setText(info.name); holder.phone.setText(info.phone); holder.icon.setImageResource(info.icon); return convertView; }
버튼 이벤트11
PhoneInfo info = (PhoneInfo)getItem(position); holder.name.setText(info.name); holder.phone.setText(info.phone); holder.icon.setImageResource(info.icon); holder.call.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } });
토스트
• Toast– public static Toast makeText(Context context, int resId,
int duration)– public static final int LENGTH_SHORT– public static final int LENGTH_LONG– public void show()– public void cancel()
12
버튼 이벤트13
PhoneInfo info = (PhoneInfo)getItem(position); holder.name.setText(info.name); holder.phone.setText(info.phone); holder.icon.setImageResource(info.icon); holder.call.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(), info.phone, Toast.LENGTH_SHORT).show(); } });
아이템 클릭 이벤트14
final PhoneInfo info = (PhoneInfo)getItem(position); holder.name.setText(info.name); holder.phone.setText(info.phone); holder.icon.setImageResource(info.icon); holder.call.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(), "Button "+info.phone, Toast.LENGTH_SHORT).show(); } }); convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(), "View "+info.name, Toast.LENGTH_SHORT).show(); } }); return convertView;
아이템 배경색
• res/drawable/selection_list_item.xml
15
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_enabled="true" android:state_pressed="false" android:state_focused="true" android:drawable="@color/list_focused" /><item android:state_enabled="true" android:state_pressed="true" android:drawable="@color/list_pressed" /><item android:state_enabled="true" android:drawable="@color/list_normal" /><item android:state_enabled="false" android:drawable="@color/list_disabled" /></selector>
아이템 배경색
• res/values/colors.xml
16
<resources> <color name="list_normal">#ff272729</color> <color name="list_pressed">#ffff7a00</color> <color name="list_focused">#ffed1624</color> <color name="list_disabled">#ff989898</color></resources>
아이템 클릭 이벤트17
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:gravity="center_vertical" android:padding="6dp" android:descendantFocusability="blocksDescendants" android:background="@drawable/selection_list_item" android:layout_height="60dp">
실습18