2014-12-01 7 views
10

Ich bin neu auf Android Fragmente und ich möchte wissen, dass, wie kann ich DatePicker in einfache Fragment und nicht eine FragmentActivity zeigen oder implementieren.Android wie man DatePicker in Fragment zeigt?

Zum Beispiel meines Klassenname ist:

public class FragmentAddCard extends Fragment { 
} 

Dank.

+1

Was Sie bisher versucht haben? Posten Sie einen Code, um Ihre Bemühungen zu zeigen, und bitten Sie dann um Hilfe. –

Antwort

34

In Ihrer Taste, um die DateFragment klicken nennen wie diese

dob.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      DialogFragment newFragment = new SelectDateFragment(); 
      newFragment.show(getFragmentManager(), "DatePicker"); 

     } 
    }); 

Hier ist der Code-Snippet für DateFragment

public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
     final Calendar calendar = Calendar.getInstance(); 
     int yy = calendar.get(Calendar.YEAR); 
     int mm = calendar.get(Calendar.MONTH); 
     int dd = calendar.get(Calendar.DAY_OF_MONTH); 
     return new DatePickerDialog(getActivity(), this, yy, mm, dd); 
     } 

     public void onDateSet(DatePicker view, int yy, int mm, int dd) { 
      populateSetDate(yy, mm+1, dd); 
     } 
     public void populateSetDate(int year, int month, int day) { 
      dob.setText(month+"/"+day+"/"+year); 
      } 

    } 
+0

in der Date-Fragment-Klasse. Ich konnte dob nicht auflösen. Bitte helfen –

+0

@Sagar Devanga Es ist TextView, um das ausgewählte Datum –

+6

ich weiß, aber ich habe beide Dinge in verschiedenen Klassen und wie kann ich die Referenz von dob übergeben oder einen Hörer anhängen. Weil es mir nicht erlaubt, einen Konstruktor mit dem Listener zu erstellen und mich zu bitten, den Standardkonstruktor zu verwenden. –

9

Dies ist ein weiteres Beispiel:

Calendar cal = Calendar.getInstance(TimeZone.getDefault()); // Get current date 

// Create the DatePickerDialog instance 
DatePickerDialog datePicker = new DatePickerDialog(this, 
        R.style.AppBlackTheme, datePickerListener, 
        cal.get(Calendar.YEAR), 
             cal.get(Calendar.MONTH), 
        cal.get(Calendar.DAY_OF_MONTH)); 
      datePicker.setCancelable(false); 
      datePicker.setTitle("Select the date"); 
datePicker.show(); 

// Listener 
private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() { 

    // when dialog box is closed, below method will be called. 
    public void onDateSet(DatePicker view, int selectedYear, 
      int selectedMonth, int selectedDay) { 
     String year1 = String.valueOf(selectedYear); 
     String month1 = String.valueOf(selectedMonth + 1); 
     String day1 = String.valueOf(selectedDay); 
     TextView tvDt = (TextView) findViewById(R.id.tvDate); 
     tvDt.setText(day1 + "/" + month1 + "/" + year1); 

    } 
}; 
1

Zu allererst i kann sagen, dass die ausgewählte Antwort funktioniert. Es ist ein guter Ansatz. Aber wenn Sie MaterailDatePicker mit Fragment verwenden möchten. Ich habe eine Lösung gefunden. Versuchen Sie, für Set DatePicker in Fragment zu folgen.

Gradle

dependencies { 
    compile 'com.wdullaer:materialdatetimepicker:3.1.3' 
} 

DatePickerFragment

package com.wdullaer.datetimepickerexample; 

import android.app.Fragment; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.TextView; 

import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; 

import java.util.Calendar; 

/** 
* A simple {@link Fragment} subclass. 
*/ 
public class DatePickerFragment extends Fragment implements DatePickerDialog.OnDateSetListener { 

    private TextView dateTextView; 
    private CheckBox modeDarkDate; 
    private CheckBox modeCustomAccentDate; 
    private CheckBox vibrateDate; 
    private CheckBox dismissDate; 
    private CheckBox titleDate; 
    private CheckBox showYearFirst; 
    private CheckBox showVersion2; 
    private CheckBox limitSelectableDays; 
    private CheckBox highlightDays; 

    public DatePickerFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.datepicker_layout, container, false); 

     // Find our View instances 
     dateTextView = (TextView) view.findViewById(R.id.date_textview); 
     Button dateButton = (Button) view.findViewById(R.id.date_button); 
     modeDarkDate = (CheckBox) view.findViewById(R.id.mode_dark_date); 
     modeCustomAccentDate = (CheckBox) view.findViewById(R.id.mode_custom_accent_date); 
     vibrateDate = (CheckBox) view.findViewById(R.id.vibrate_date); 
     dismissDate = (CheckBox) view.findViewById(R.id.dismiss_date); 
     titleDate = (CheckBox) view.findViewById(R.id.title_date); 
     showYearFirst = (CheckBox) view.findViewById(R.id.show_year_first); 
     showVersion2 = (CheckBox) view.findViewById(R.id.show_version_2); 
     limitSelectableDays = (CheckBox) view.findViewById(R.id.limit_dates); 
     highlightDays = (CheckBox) view.findViewById(R.id.highlight_dates); 

     // Show a datepicker when the dateButton is clicked 
     dateButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Calendar now = Calendar.getInstance(); 
       DatePickerDialog dpd = DatePickerDialog.newInstance(
         DatePickerFragment.this, 
         now.get(Calendar.YEAR), 
         now.get(Calendar.MONTH), 
         now.get(Calendar.DAY_OF_MONTH) 
       ); 
       dpd.setThemeDark(modeDarkDate.isChecked()); 
       dpd.vibrate(vibrateDate.isChecked()); 
       dpd.dismissOnPause(dismissDate.isChecked()); 
       dpd.showYearPickerFirst(showYearFirst.isChecked()); 
       dpd.setVersion(showVersion2.isChecked() ? DatePickerDialog.Version.VERSION_2 : DatePickerDialog.Version.VERSION_1); 
       if (modeCustomAccentDate.isChecked()) { 
        dpd.setAccentColor(Color.parseColor("#9C27B0")); 
       } 
       if (titleDate.isChecked()) { 
        dpd.setTitle("DatePicker Title"); 
       } 
       if (highlightDays.isChecked()) { 
        Calendar date1 = Calendar.getInstance(); 
        Calendar date2 = Calendar.getInstance(); 
        date2.add(Calendar.WEEK_OF_MONTH, -1); 
        Calendar date3 = Calendar.getInstance(); 
        date3.add(Calendar.WEEK_OF_MONTH, 1); 
        Calendar[] days = {date1, date2, date3}; 
        dpd.setHighlightedDays(days); 
       } 
       if (limitSelectableDays.isChecked()) { 
        Calendar[] days = new Calendar[13]; 
        for (int i = -6; i < 7; i++) { 
         Calendar day = Calendar.getInstance(); 
         day.add(Calendar.DAY_OF_MONTH, i * 2); 
         days[i + 6] = day; 
        } 
        dpd.setSelectableDays(days); 
       } 
       dpd.show(getFragmentManager(), "Datepickerdialog"); 
      } 
     }); 

     return view; 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     DatePickerDialog dpd = (DatePickerDialog) getFragmentManager().findFragmentByTag("Datepickerdialog"); 
     if(dpd != null) dpd.setOnDateSetListener(this); 
    } 

    @Override 
    public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) { 
     String date = "You picked the following date: "+dayOfMonth+"/"+(++monthOfYear)+"/"+year; 
     dateTextView.setText(date); 
    } 
} 
0
button_name.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     switch (event.getAction()){ 
      case MotionEvent.ACTION_DOWN: 
       DatePickerDialog datePickerDialog = DatePickerDialog.newInstance(new DatePickerDialog.OnDateSetListener() { 
        @Override 
        public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) { 
         String years=""+year; 
         String months=""+(monthOfYear+1); 
         String days=""+dayOfMonth; 
         if(monthOfYear>=0 && monthOfYear<9){ 
          months="0"+(monthOfYear+1); 
         } 
         if(dayOfMonth>0 && dayOfMonth<10){ 
          days="0"+dayOfMonth; 

         } 
         race_date.setText(months+"/"+days+"/"+years); 
        } 
       }, now.get(Calendar.YEAR), 
         now.get(Calendar.MONTH), 
         now.get(Calendar.DAY_OF_MONTH)); 
       datePickerDialog.setMinDate(now); 
       datePickerDialog.show(getActivity().getFragmentManager(), "Datepicker"); 
       break; 
     } 
     return false; 
    } 
}); 
+1

Bitte nicht nur Dump-Code, fügen Sie eine Erklärung hinzu. –

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/18579564) –

+0

Vielen Dank für dieses Code-Snippet, das möglicherweise eine begrenzte, sofortige Hilfe bietet. Eine [richtige Erklärung] (https://meta.stackexchange.com/q/114762) würde ihren langfristigen Wert erheblich verbessern, indem sie zeigt, warum dies eine gute Lösung für das Problem ist und es für zukünftige Leser mit anderen nützlicher machen würde , ähnliche Fragen. Bitte [bearbeiten] (https://meta.stackoverflow.com/posts/360251/edit) Ihre Antwort, um einige Erklärungen hinzuzufügen, einschließlich der Annahmen, die Sie getroffen haben. [ref] (https://meta.stackoverflow.com/a/360251/8371915) – user8371915

Verwandte Themen