화면구성입니다. 기본적인 레이아웃 만드는건 생략하도록 하겠습니다.
이글의 핵심 내용은 커스텀 버튼이있는 리스트뷰를 커스텀어댑터를 사용하여 표시합니다.
리스트뷰의 버튼들이 들어가있는데 이 이벤트를 어찌 처리할꼬? 처리하였는대 갱신이 안되네?를 해결해보겠습니다.
아래 코드는 약간의 버그를 가지고있습니다. 그대로따라하지 마시고 이런 방식으로 할 수 있다. 라는것으로 참조하세요.
MainActivity.class
//myAdapter를 사용하여 list표시
myAdapter = new MyAdapter(this, R.layout.mainwelramlist, welarmDTO.getSelectList());
listView.setAdapter(myAdapter);
myadapter에 세팅을 해줍니다.
MyAdapter.class
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final String welarmNo;
// 리스트뷰 갯수만큼 실행되므로 반복성에 주의해야한다
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(itemLayout, parent, false);
// 메인리스트 - TextView(name)
TextView textView = (TextView) convertView
.findViewById(R.id.welarmMaintextViewList);
Map welarmDTOMap = (Map) list.get(position);
// 텍스트뷰 텍스트 세팅
String getText = welarmDTOMap.get("name").toString();
textView.setText(getText);
// 텍스트뷰 테그 세팅
textView.setTag(welarmDTOMap.get("welarmNo").toString());
welarmNo = welarmDTOMap.get("welarmNo").toString();
// onOff메시지
Button button = (Button) convertView.findViewById(R.id.welarmMainListOnOff);
if (welarmDTOMap.get("state").equals("1")) {
button.setText("on");
} else {
button.setText("off");
}
// 메인리스트 - 수정버튼
Button OptionButton = (Button) convertView.findViewById(R.id.welarmMainListOption);
OptionButton.setOnClickListener((OnClickListener)context);
OptionButton.setTag(welarmDTOMap.get("welarmNo").toString());
// 메인리스트 - On/Off버튼
Button onOffButton = (Button) convertView.findViewById(R.id.welarmMainListOnOff);
onOffButton.setOnClickListener((OnClickListener)context);
onOffButton.setTag(welarmDTOMap.get("welarmNo").toString());
// 메인리스트 - 식제버튼
Button deleteButton = (Button) convertView.findViewById(R.id.welarmMainListDelete);
deleteButton.setOnClickListener((OnClickListener)context);
deleteButton.setTag(welarmDTOMap.get("welarmNo").toString());
}
return convertView;
}
버튼을 만들어서 리스너를 달아주는데 구현은 MainActivity에서 할겁니다. context는 MainActivity의 context입니다.
Tag! 메모를 달아서 전달할 수 있습니다.
MainActivity.class List내부에 버튼을 클릭하면 MainActivity에서 정의한 onClick가 호출된다.
@Override
public void onClick(View v) {
Log.d("MainActivity OnClick테스트", "test: vid:"+v.getId()+"tag:"+v.getTag());
//추가버튼 switch로 바꾸도록
switch(v.getId()){
case R.id.welarmAddButton:
Intent i = new Intent(this, AddWelarmActivity.class);
startActivity(i);
break;
case R.id.welarmMainListOption:
buttonAction.welarmListModifyButton(this, v.getTag().toString());
onResume();
break;
case R.id.welarmMainListOnOff:
buttonAction.welarmListOnOff(this, v.getTag().toString());
myAdapter.notifyDataSetChanged();
Log.d("MainActivity.class", "test: myAdapter_switch:"+myAdapter);
onResume();
break;
case R.id.welarmMainListDelete:
//알람삭제
UpdateFrequence updateFrequence = new UpdateFrequence();
updateFrequence.deleteAlarm(this, v.getTag().toString());
buttonAction.welarmListDeleteButton(this, v.getTag().toString());
myAdapter.notifyDataSetChanged();
onResume();
break;
default:
break;
}
}
호출되는 버튼ID에 따라서 switch문이 실행됩니다. case문마다 myAdapter메소드의 notifyDataSetChanged를 사용하려면 어댑터에 집어넣은 list목록에 변화가 있어야 합니다.
제가 만드는어플에선 그딴건 없으므로 어떤 버튼을 누르던지 onResume()을 다시 호출하여화면을 새로고칩니다.
'IT개발 > Android' 카테고리의 다른 글
[Android] Google Map google-play-services-lib Error (0) | 2014.04.14 |
---|---|
[Android] 구글맵(Google map) 키를 얻어봅시다 (0) | 2014.04.13 |
[Android] 인텐트 필터(intent filter)란? (0) | 2014.04.11 |
[ANDROID] 키보드 숨기기 (0) | 2014.01.23 |
[ANDROID] 안드로이드 BUNDLE (0) | 2014.01.23 |