안녕하세요
시작일 데이트피커와 종료일 데이트피커 두개를 한 다이얼로그에 집어 넣고
두 날짜를 합해 그 사이에 있는 날짜의 데이터들을 서버에서 받아와 리스트뷰에 뿌려주는 엑티비티를 만들고 있는데요
레이아웃에서 두개의 DatePicker를 만들어서 이걸 LayoutInflater해서 다이얼로그에 표현되게 만들었는데요
실제로 실행해 봤을 때 모습은 아래의 이미지처럼 나옵니다

[이중 DatePicker]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="시작일"
android:textColor="#ffffff"
android:textSize="15sp" />
<DatePicker
android:id="@+id/start_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" >
</DatePicker>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dip"
android:text="종료일"
android:textColor="#ffffff"
android:textSize="15sp" />
<DatePicker
android:id="@+id/end_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" >
</DatePicker>
</LinearLayout>
그리고 데이트피커를 두개 넣는 레이어는 위의 소스처럼 구성했구요
AlertDialog를 이용해 설정을 누를경우 각 데이트피커에 유저가 설정한대로 값을 저장하게 만들었습니다
AlertDialog date_dailog = new AlertDialog.Builder(this)
.setTitle("기간설정")
.setMessage("기간을 설정해주세요" )
.setPositiveButton("설정", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
s_date =
start_date.getYear()+"년"+
String.format("%02d", start_date.getMonth()+1)+"월"+
String.format("%02d", start_date.getDayOfMonth())+"일";
e_date =
end_date.getYear()+"년"+
String.format("%02d", end_date.getMonth()+1)+"월"+
String.format("%02d", end_date.getDayOfMonth())+"일";
server_s_date =
start_date.getYear()+"-"+
String.format("%02d", start_date.getMonth()+1)+"-"+
String.format("%02d", start_date.getDayOfMonth());
server_e_date =
end_date.getYear()+"-"+
String.format("%02d", end_date.getMonth()+1)+"-"+
String.format("%02d", end_date.getDayOfMonth());
date_view.setText(s_date+" ~ "+e_date);
dialog.dismiss();
setListView();
}
})
.setNegativeButton( "취소", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
})
.setView(dialog_view)
.show();
setListView();
}
굉장히 만족스러운 결과가 나왔는데요
문제는 년월일 중에 일을 빼고 년월만 할려고 해보니
Layout에 구성되어 있는 DatePicker가 년 월 일 단위로 분리가 안되어서 곤란한 상황입니다
분명히 실행상으로는 유저가 년월일 각각 독립적으로 날짜를 바꿀 수 있게 구성되어 있었는데
레이아웃에서 혹은 java코드에서 이걸 분할해주는 명령어를 찾을수가 없습니다
열심히 검색해 보니 DatePickerDialog로 년월만 나오게 만드신분의 소스를 보게 되었는데
public class Main extends Activity implements OnDateSetListener
{
DatePickerDialog datePickerDialog;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
datePickerDialog = new DatePickerDialog(this, this, 2013, 10, 23);
try
{
Field[] f = datePickerDialog.getClass().getDeclaredFields();
for (Field dateField : f)
{
if (dateField.getName().equals("mDatePicker"))
{
dateField.setAccessible(true);
DatePicker datePicker = (DatePicker) dateField
.get(datePickerDialog);
Field datePickerFields[] = dateField.getType()
.getDeclaredFields();
for (Field datePickerField : datePickerFields)
{
if ("mDayPicker".equals(datePickerField.getName()) || "mDaySpinner".equals(datePickerField.getName()))
{
datePickerField.setAccessible(true);
Object dayPicker = new Object();
dayPicker = datePickerField.get(datePicker);
try
{
((View) dayPicker).setVisibility(View.GONE);
}
catch (ClassCastException e)
{
e.printStackTrace();
}
}
}
}
}
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
catch (IllegalArgumentException e)
{
e.printStackTrace();
}
datePickerDialog.show();
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
}
}
이분의 코드로 새로운 프로젝트를 만들어서 실행해보니 년월만 나오게 아주 깔끔하지만 데이트피커가 하나 밖에 존재하지 않더라구요
그리고 alertdialog처럼 타이틀 메시지 버튼제어를 어떻게 해야될지 전혀 감이 안오고요
Field[]라는 것으로 일을 잘라내서 setVisibility를 이용해 일을 숨긴 후 년월만 나오게 하신것 같은데 이해가 안되니 응용도 안되는 상황입니다
난관에 봉착해서 몇일간 진행이 안되고 이것저것 해보다가 지쳐서 최후의 수단으로 이렇게 글을 쓰게 됐는데요
제가 원하는 답변을 다시 간추려서 써 보겠습니다
1. 제가 처음 구성한 이중 데이트피커의 소스를 이용해 년월만 나오게 할 수 있는건가요?
2. 마지막에 데이트피커다이얼로그를과 필드를 이용해서 년월만 나오게 한 소스를 이용해 피커 2개를 집어 넣고 등록버튼을 눌렀을 때 텍스트박스에 날짜를 업데이트해주고 서버에 데이터를 끌고와 리스트뷰에 뿌려주게 할 수 있나요?