마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

datePicker 일 지우기 질문이 있습니다.

0 추천
public class cmftime extends Activity {
	
	DatePicker datePicker;
	Button databtn;
	Intent igetinfo;
	Bundle extra;
	String msg;
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		requestWindowFeature(Window.FEATURE_NO_TITLE);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
				WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

		setContentView(R.layout.cmftime);


		igetinfo = new Intent();
		
		
		datePicker = (DatePicker) findViewById(R.id.datepicker);
		 try {
		        Field f[] = datePicker.getClass().getDeclaredFields();
		        for (Field field : f) {
		            if (field.getName().equals("mdayPicker")) 
		            {
		            	field.setAccessible(true);
		                Object dayPicker = new Object();
		                dayPicker = field.get(datePicker);
		                ((View) dayPicker).setVisibility(View.GONE);
		            }
		        }
		    } 
		    catch (SecurityException e) {
		        Log.d("ERROR", e.getMessage());
		    } 
		    catch (IllegalArgumentException e) {
		        Log.d("ERROR", e.getMessage());
		    } 
		    catch (IllegalAccessException e) {
		        Log.d("ERROR", e.getMessage());
		    }
		
		
		
		
		
		databtn = (Button)findViewById(R.id.databtn);

		
		databtn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub	
				String year = String.valueOf(datePicker.getYear());
				String month = String.valueOf(datePicker.getMonth()+1);

				if (datePicker.getMonth() + 1 < 10) 
				{
					String ym = "" + year + "-0" + month + "";
					igetinfo.putExtra("timeresults", ym);	
				}
				else 
				{
					String ym = "" + year + "-" + month + "";
					igetinfo.putExtra("timeresults", ym);
				}
//				igetinfo.putExtra("year", datePicker.getYear());
//				igetinfo.putExtra("month", datePicker.getMonth()+1);
				setResult(0x05, igetinfo);
				finish();
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

에서 중간에 

datePicker = (DatePicker) findViewById(R.id.datepicker);
		 try {
		        Field f[] = datePicker.getClass().getDeclaredFields();
		        for (Field field : f) {
		            if (field.getName().equals("mdayPicker")) 
		            {
		            	field.setAccessible(true);
		                Object dayPicker = new Object();
		                dayPicker = field.get(datePicker);
		                ((View) dayPicker).setVisibility(View.GONE);
		            }
		        }
		    } 
		    catch (SecurityException e) {
		        Log.d("ERROR", e.getMessage());
		    } 
		    catch (IllegalArgumentException e) {
		        Log.d("ERROR", e.getMessage());
		    } 
		    catch (IllegalAccessException e) {
		        Log.d("ERROR", e.getMessage());
		    }

if (field.getName().equals("mdayPicker")) 이 부분을 타지 못해서 마지막 day가 삭제가 안되는거 같은데 

정확한 이유를 모르겠습니다. 가능하시면 답변부탁드리겠습니다.

Noswind (2,330 포인트) 님이 2014년 7월 9일 질문

2개의 답변

0 추천
 
채택된 답변
리플렉션을 이용하여 DatePicker의 private 필드에 접근하는 것 같네요.

일단 에뮬레이터에서 의도한 대로 동작하는지 확인하시기 바랍니다.

에뮬레이터에서는 동작하는데 기기에서는 동작하지 않으면 해당 기기에서는 DatePicker에 그 필드가 없는 겁니다.
익명사용자 님이 2014년 7월 9일 답변
Noswind님이 2014년 7월 10일 채택됨
에뮬에서도 동작이 안합니다.
디버그로 확인한 결과로는 저 if문 자체를 타지를 못해서 문제가 생기는거 같은데 정확히 어떻게 수정을 해야할지 도움을 부탁드립니다...
저 코드를 어디서 보시고 사용하셨나요?
기본적으로 클래스의 private 필드는 공개된 API가 아니므로 언제든 바뀔 수 있습니다.
아마 저 코드는 특정 버전 안드로이드에서만 동작할 것 같네요.
0 추천
갈무리 (12,430 포인트) 님이 2014년 7월 10일 답변
감사합니다 저 글을 못봣었네요
안의 소스는 구글링을 하다가 발견은 하였지만 어떻게 써야 할지 막막하다가 댓글을 보고 도움을 얻어갑니다
...