로봇 전화번호부 4/4 UNIT 12 로봇 SW 콘텐츠 교육원 조용수
학습 목표 뷰 홀더 패턴을 사용할 수 있다. 토스트를 사용할 수 있다. 클릭 이벤트를 처리할 수 있다. 2
미션 3
너무 많은 아이템 protected 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, " ")); phones.add(new PhoneInfo(R.drawable.boy, " 갑순이 " + i, " ")); } … }
뷰 홀더 패턴 5 private class ViewHolder { ImageView icon; TextView name; TextView phone; ImageView call; } Widget 할당 부분을 Tag 에 저장하여, 초기화 시간을 줄이는 방법
뷰 홀더 패턴 6 private class PhoneListAdapter extends ArrayAdapter public View getView(int position, View convertView, ViewGroup parent) 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 public View getView(int position, View convertView, ViewGroup parent) 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; }
버튼 이벤트 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() 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() 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() public void onClick(View v) { Toast.makeText(getContext(), "Button "+info.phone, Toast.LENGTH_SHORT).show(); } }); convertView.setOnClickListener(new View.OnClickListener() public void onClick(View v) { Toast.makeText(getContext(), "View "+info.name, Toast.LENGTH_SHORT).show(); } }); return convertView;
아이템 배경색 res/drawable/selection_list_item.xml 15 <item android:state_enabled="true" android:state_pressed="false" android:state_focused="true" /> <item android:state_enabled="true" android:state_pressed="true" /> <item android:state_enabled="true" /> <item android:state_enabled="false" />
아이템 배경색 res/values/colors.xml 16 #ff #ffff7a00 #ffed1624 #ff989898
아이템 클릭 이벤트 17 <LinearLayout xmlns:android=" android:orientation="horizontal" android:layout_width="match_parent" android:gravity="center_vertical" android:padding="6dp" android:descendantFocusability="blocksDescendants" android:layout_height="60dp">
실습 18