📌 개요
등록할 사용자를 성별, 이름, 연락처로 저장할수 있고 통화로 바로가기 버튼을 눌러 이동할 수 있는 연락처 앱이다.
📌 실행 동영상
📌 기능
- ADD CONTACT 버튼을 누르면 연락처 추가화면으로 이동한다.
- 뒤로가기 버튼은 작동못하게 막는다.
- EXIT 버튼을 누르면 앱 종료를 물어보는 창이 뜨며, Yes를 누르면 종료되어야 하고, NO는 누르면 취소하고 다시 창으로 돌아간다.
- 이름, 성별, 전화번호의 정보가 입력된다.
- 처음에는 기본으로 unspecified로 선택되어있다.
- Male은 초록색 프로필 사진, Female은 주황색 사진, Unspecified는 검은색 사진이다.
- Save버튼 클릭시 처음화면에 전화번호부가 추가되며, 전화걸기를 걸 수있는 버튼이 있다.
- 전화번호에 입력된 값이 없으면 칸이 추가되지 않는다.
- Cancel을 누르면 칸이 추가되지 않는다.
- 저장된 전화번호부에서 Call 버튼을 누르면 전화번호가 입력되어있는 전화앱으로 이동된다. (전화걸기 바로직전)
- 연락처 정보 칸의 전체길이가 화면보다 길어지면 스크롤이 가능해진다.
📌 중요한 코드 설명
RadioGroup 🔑
RadioButton을 RadioGroup으로 감싸주면 RadioGroup안에서 한 버튼만 선택될수 있다. 중복 불가. 또 RadioGroup의 메소드를 이용하여 쉽게 어느것이 현재 체크되었는지 파악할수 있는 장점이 있다.
라디오그룹.setOnCheckedChangeListener() : 자동으로 들어있는 인자 i는 int값으로 현재 체크된 버튼의 고유 id를 닮고 있다.
Intent 화면전환 ❗❗ 중요 ❗❗
Intent를 이용하여 화면을 생성하면 화면위에 화면이 스택처럼 쌓이게 된다.
ADD CONTACT버튼에서 단순히 화면 생성이면 간단하게 Intent생성 뒤 startActivity를 해주면 되지만, 이 앱은 화면간 전환이 이루어져야하며 연락처를 저장해야함으로 startActivityForResult를 반드시 이용하여 연결하여야 한다.
CALL 버튼의 경우 startActivity와 Finish()를 써도 무방함.
<참고>
startActivity: 단순히 화면을 위에 올릴때 사용 (finish() 함수로 화면 삭제 가능)
startActivityForResult: 화면 전환이 이루어져야하며, 그 말은 즉 화면을 왔다 갔다 할 때 변경된 것들이 저장되어 있어야함. 만약 startActivity를 쓴다면 finish()로 화면을 지워준들 겉보기엔 화면전환 같을지 몰라도 새로 생성된 화면이기 때문에 저장이 이루어질수 없다.
AlertDialog.Builder
EXIT 버튼에서 알림창이 뜨게 하기 위한 객체. 버튼에 리스너를 달아준뒤 생성하면 된다.
//종료 버튼 누를시 실행창 뜨기
public void onClickExit(View v){
AlertDialog.Builder builder= new AlertDialog.Builder(MainActivity.this);
builder.setMessage("Would you like to exit the App?");
builder.setPositiveButton("YES, EXIT", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
finish();
}
});
builder.setNegativeButton("NO, CANCEL",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
return;
}
});
builder.show();
}
});
BaseAdapter ❗❗ 중요 ❗❗
developer.android.com/reference/android/widget/BaseAdapter
public class MainListAdapter extends BaseAdapter {
@Override
public int getCount() {
return 0;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return convertView;
}
}
전화번호부에 연락처 정보들을 저장하기 위해 자바에서 BaseAdapter를 이용하였다.
전화번호부에 저장할 똑같은 틀을 만들기위해 Phone_info.xml와 .java(LinearLayout상속받아야함)을 하나 더 만든다. 아래 예시.
이 중에서 가장 중요한 함수는 getView()다.
getCount() : 현재 목록들의 갯수 리턴
getItem(): index에 해당하는 목록 리턴
getItemId() : id 리턴
getView() 메소드 : 목록의 화면처리, 이벤트 처리를 담당한다. 자동으로 실행되는 함수 ! 이함수에서 LayoutInflator로 Phone_info.xml과 연결해준다. ArrayList<Person> 를 만들어 전화번호부를 저장 Person은 별도로 만들어준 class 객체이며 (성별, 이름 ,전화번호부의 정보가 들어간다) , Intent가 처음화면에 날라올때마다 그것의 정보를 Person에 저장시켜 객체를 만든뒤 Arraylist에 누적저장시키면된다.
개인적으로 BaseAdapter가 가장 어려웠다 😿
전체 소스코드는 깃허브에 Private으로 올려두었다.
'안드로이드' 카테고리의 다른 글
[Java] 배우들의 영화정보 API로 가져오는 앱 with 안드로이드 스튜디오(미완성) (1) | 2020.12.03 |
---|---|
[Java] 네트워킹 in 안드로이드 스튜디오 (0) | 2020.11.19 |
[Java] Service에 Thread활용한 Log찍기 앱 with 안드로이드 스튜디오 (9) | 2020.11.10 |
[Java] Navigation 이용한 Photos SlideShow App with 안드로이드 (3) | 2020.11.09 |
[Java] 안드로이드 스튜디오 기초 함수모음 (0) | 2020.10.12 |