2012-11-06 5 views
1

나는 안드로이드 단어가 생소합니다.날짜 선택 도구가있는 Android 텍스트 회 전자

시간 및 날짜 선택 도구가있는 텍스트보기 회 전자를 수행하고 있습니다.

  1. 기본적으로 텍스트보기에서 현재 시간과 날짜를 설정하는 방법. 선택 시간/날짜 후
  2. 클릭 "설정은"버튼을, 내 시간/날짜 선택 여기

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:paddingLeft="16dp" 
android:paddingRight="16dp" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/startTime" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"     
    style="@android:style/Widget.Holo.Spinner" 
    android:onClick="showTimePickerDialog"/> 
<TextView 
    android:id="@+id/endTime" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"     
    style="@android:style/Widget.Holo.Spinner" 
    android:onClick="showTimePickerDialog"/> 
<TextView 
    android:id="@+id/date" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"     
    style="@android:style/Widget.Holo.Spinner" 
    android:onClick="showDatePickerDialog"/> 
여기

내 MainActivity 내 activity_main.xml 비어 이유 .java

import java.util.Calendar; 
import android.os.Bundle; 
import android.app.Activity; 
import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.app.DialogFragment; 
import android.app.TimePickerDialog; 
import android.text.format.DateFormat; 
import android.view.Menu; 
import android.view.View; 
import android.widget.DatePicker; 
import android.widget.TimePicker; 

public class MainActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    public void showTimePickerDialog(View v) { 
     DialogFragment newFragment = new TimePickerFragment(); 
     newFragment.show(getFragmentManager(), "timePicker"); 
    } 

    public void showDatePickerDialog(View v) { 
     DialogFragment newFragment = new DatePickerFragment(); 
     newFragment.show(getFragmentManager(), "datePicker"); 
    } 

    public static class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      // Use the current time as the default values for the picker 
      final Calendar c = Calendar.getInstance(); 
      int hour = c.get(Calendar.HOUR_OF_DAY); 
      int minute = c.get(Calendar.MINUTE); 

      // Create a new instance of TimePickerDialog and return it 
      return new TimePickerDialog(getActivity(), this, hour, minute, 
        DateFormat.is24HourFormat(getActivity())); 
     } 

     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
      // Do something with the time chosen by the user 
     } 
    } 

    public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      // Use the current date as the default date in the picker 
      final Calendar c = Calendar.getInstance(); 
      int year = c.get(Calendar.YEAR); 
      int month = c.get(Calendar.MONTH); 
      int day = c.get(Calendar.DAY_OF_MONTH); 

      // Create a new instance of DatePickerDialog and return it 
      return new DatePickerDialog(getActivity(), this, year, month, day); 
     } 

     public void onDateSet(DatePicker view, int year, int month, int day) { 
      // Do something with the date chosen by the user 
     } 
    } 
} 

고맙습니다.

+0

나는 Android Pickers 튜토리얼 을 따른다. http://developer.android.com/guide/topics/ui/controls/pickers.html – user1661740

답변

1

내가 볼 문제는 DatePickerFragmentTimePickerFragments은 정적이다, 그래서 그들은 활동의 textviews에 액세스 할 수 없습니다. 정적이 아니라면 timeTextView.setText(...) 안에 onTimeSet(...) 메서드가 있어야합니다. (그런데 필요하다면 다른 활동에서 재사용 할 수 있기 때문에 정적으로 유지하는 것이 좋습니다.)

이 문제를 해결할 수있는 방법 중 하나는 추가 인터페이스를 만든 다음이를 선택 대화 상자 조각으로 전달하는 것입니다. 당신은 그들을 만들고 콜백을 만든다. 하지만 OnDateSetListener와 OnTimeSetListener 인터페이스가 이미 존재할 때 왜 그렇게합니까?

아래의 DatePickerFragment 만 참조 하겠지만 TimePickerFragment에도 모두 동일하게 적용됩니다.

MainActivityDatePickerFragment이 아니고 OnDateSetListener을 구현해야합니다. OnDateSetListener의 오버라이드 된 메소드 중 하나는 TextView에서 날짜를 설정하는 onDateSet(...)입니다. 예를 들면 :

@Override 
public void onDateSet(DatePicker view, int year, int monthOfYear, 
     int dayOfMonth) { 
    Calendar cal = new GregorianCalendar(year, monthOfYear, dayOfMonth); 
    mDateTextView.setText(DATE_FORMATTER.format(cal.getTime())); 
} 

귀하의 DatePickerFragment 매개 변수로 OnDateSetListener를 받아 그것에 대한 참조를 보유하고 생성자가 있어야합니다. 이 같은 (AN OnDateSetListener도 인), 당신 여기 DatePickerFragment 당신의 showDatePickerDialog(View v) 내부 지금 https://gist.github.com/2935353

을 구현하여 MainActivity를 전달하는 방법을 참조하십시오 : 다음

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
DialogFragment newFragment = new DatePickerDialogFragment(MainActivity.this); 
newFragment.show(ft, "date_dialog"); 

을 시간이 설정되어있는 경우, 귀하의 MainActivity가 '구현하는 OnDateSetListener '가 콜백을 받으면 텍스트 뷰가 업데이트됩니다.

희망 사항은 약간 지워 줍니 다.

P.DatePickerFragment에도 빈 생성자가 있어야합니다. 그러면 기기 회전시 앱이 충돌하지 않습니다.

1

TextView에 날짜/시간을 표시하는 문장을 작성해야합니다. 은 클래스 변수로 정의됩니다.

View v = null;  

    public void showTimePickerDialog(View v) { 
    this.v = v; 
    DialogFragment newFragment = new TimePickerFragment(); 
    newFragment.show(getFragmentManager(), "timePicker"); 

} 

public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     // Do something with the time chosen by the user 
     v.setText(""+hourOfDay+":"+minute); 

    }