2016-07-27 20 views
1

Ich baue eine App, wo Sie ein Datum mit einem DatePickerDialog wählen können, nachdem Sie wählen und tippen Sie auf "Ok", muss das Datum in einem TextView angezeigt werden.Wie setze ich Text aus einem DialogFragment mit DatePickerDialog

Ich habe Probleme dabei, da ich "setText.mTexView (foo)" nicht einfach in einem DialogFragment verwenden kann ... Ich habe versucht, die Textansicht durch den Konstruktor zu übergeben oder den Fernseher in das Fragment zu bekommen Ich könnte nicht, bitte helfen.

Dies ist mein Code:

public class PickDate_main extends AppCompatActivity { 

EditText tv_fecha; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.pickdate_main); 
} 


public void showDatePickerDialog(View v){//This method is executed from the layout with a button 

    PickDate_Dialog dialog = new PickDate_Dialog(); 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    dialog.show(ft, "Date pickeerr"); 
} 
} 

-

public class PickDate_Dialog extends DialogFragment implements DatePickerDialog.OnDateSetListener{ 

public PickDate_Dialog(){ 
} 

public Dialog onCreateDialog(Bundle savedInstanceState){ 

    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); 
    return new PickDate_Dialog(getActivity(),this,year,month,day); 
} 

@Override 
public void onDateSet(DatePicker view, int year, int month, int day) { 


    String date = day + "-"+(month+1)+"-"+year; 

    //I want to write the string "data", i suppose it must be here 
} 

} 

Antwort

0

Ich glaube es sollte funktionieren, wenn Sie die Textview zu PickDate_Dialog senden, speichern und es nennen, wenn notwendig. Nicht sicher über return new PickDate_Dialog(getActivity(),this,year,month,day); obwohl.

public class PickDate_Dialog extends DialogFragment implements DatePickerDialog.OnDateSetListener{ 

    private EditText dateEditText; 

    public PickDate_Dialog(EditText et){ 
     dateEditText = et; 
    } 

    public Dialog onCreateDialog(Bundle savedInstanceState){ 

     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); 

     //Do you have a constructor for this? This is likely your issue 

     return new PickDate_Dialog(getActivity(),this,year,month,day); 
    } 

    @Override 
    public void onDateSet(DatePicker view, int year, int month, int day) { 


     String date = day + "-"+(month+1)+"-"+year; 
     if (dateEditText != null) 
      dateEditText.setText(date); 
    } 

} 

Allerdings sind hier noch ein paar Ideen:

Option 1: einen Blick auf Schnittstellen haben. Auf diese Weise können Sie Callbacks zwischen Klassen senden (DatePickerDialog.OnDateSetListener ist ein Beispiel). Erstellen Sie eine neue Schnittstelle im Dialog Klasse

public interface PickDateInterface { 
    void onDateSet(String date) 
} 

erstellen Sie eine Variable für sie

privat PickDateInterface mPDInterface;

und fügen Sie es zu dem ursprünglichen onDateSet

@Override 
public void onDateSet(DatePicker view, int year, int month, int day) { 
    String date = day + "-"+(month+1)+"-"+year; 

    if (mPDInterface != null) { 
     mPDInterface.onDateSet(date); 
    } 
} 

und wenn Sie den Dialog erstellen, fügen Sie einfach diese Schnittstelle als Parameter, und fügen Sie, was Sie in der Schnittstelle tun müssen.



Option 2:.

eine öffentliche Methode in Ihrer Aktivität erstellen und über nennen (([Ihr Aktivitätsname]) [Ihrem Kontext]) Ihre Methode; Sie sind im Grunde Ihre Kontext Ihrer Tätigkeit Gießen und unter Verwendung des Verfahrens Beispiel: ((PickDate_main).getContext()).setDateText(date);

+0

Ausgezeichnete Antwort, Sie half mir so viel, danke! – user6642560