Cómo establecer valores de diálogo seleccionados en TextViews en Fragmento

Estoy escribiendo una aplicación para Android usando Fragmentos , y en uno de mis fragmentos estoy usando dos selectores (fecha y hora) .

Busqué en Google y encontré la solución para mostrar los cuadros de diálogo en Fragmento mediante el toque en el botón, y estoy haciendo lo mismo, mostrando diálogos siempre que el usuario haga clic en el botón correspondiente (s) .

Pero no estoy consiguiendo cómo fijar los valores del diálogo a sus TextView (s) respectivos .

Ver mi código abajo, estoy usando para mostrar diálogos usando el golpecito en los botones,

DatePickerDialogFragment.java:

public class DatePickerDialogFragment extends DialogFragment { private DatePickerDialog.OnDateSetListener mDateSetListener; public DatePickerDialogFragment() { } DatePickerDialogFragment(OnDateSetListener dateSetListener) { mDateSetListener = dateSetListener; } @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 DatePickerDialog dpd = new DatePickerDialog(getActivity(), mDateSetListener, year, month, day); // should not accept past dates return dpd; } } 

TimePickerFragment.java:

 public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { private TimePickedListener mListener; @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())); } @Override public void onAttach(Activity activity) { // when the fragment is initially shown (ie attached to the activity), cast the activity to the callback interface type super.onAttach(activity); try { mListener = (TimePickedListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement " + TimePickedListener.class.getName()); } } @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { // when the time is selected, send it to the activity via its callback interface method Calendar c = Calendar.getInstance(); c.set(Calendar.HOUR_OF_DAY, hourOfDay); c.set(Calendar.MINUTE, minute); mListener.onTimePicked(c); } public static interface TimePickedListener { public void onTimePicked(Calendar time); } } 

Fragment1.java:

  public class Fragment1 extends SherlockFragment { Button buttonDate; Button buttonTime; Button buttonSubmit; TextView textDate; TextView textTime; Spinner spinner; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment1, container, false); buttonDate = (Button) rootView.findViewById(R.id.btnDate); buttonTime = (Button) rootView.findViewById(R.id.btnTime); buttonSubmit = (Button) rootView.findViewById(R.id.btnSubmit); textDate = (TextView) rootView.findViewById(R.id.txtDate); textTime = (TextView) rootView.findViewById(R.id.txtTime); /* // calendar class get the current instance of android phone clock Calendar c = Calendar.getInstance(); // a formatted object for date and time SimpleDateFormat sdfTime = new SimpleDateFormat("h:mm a"); // save date and time in string object. String strTime = sdfTime.format(c.getTime()); textTime.setText(strTime); SimpleDateFormat sdfDate = new SimpleDateFormat("dd-MMM-yyyy"); String strDate = sdfDate.format(c.getTime()); textDate.setText(strDate);*/ buttonTime.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // show the time picker dialog DialogFragment newFragment = new TimePickerFragment(); newFragment.show(getActivity().getSupportFragmentManager(), "timePicker"); } }); buttonDate.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub DialogFragment newFragment = new DatePickerDialogFragment(); newFragment.show(getActivity().getSupportFragmentManager(), "datePicker"); } }); spinner = (Spinner) rootView.findViewById(R.id.spinner); // Spinner click listener spinner.setOnItemSelectedListener((OnItemSelectedListener) getActivity()); // Spinner Drop down elements List<String> categories = new ArrayList<String>(); categories.add("Automobile"); categories.add("Business Services"); categories.add("Computers"); categories.add("Education"); categories.add("Personal"); categories.add("Travel"); // Creating adapter for spinner ArrayAdapter<String> dataAdapter = new ArrayAdapter<String> (getActivity(), android.R.layout.simple_spinner_item, categories); // Drop down layout style - list view with radio button dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // attaching data adapter to spinner spinner.setAdapter(dataAdapter); buttonSubmit.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("message/rfc822"); intent.putExtra(Intent.EXTRA_EMAIL, "[email protected]"); intent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); // in place of "Text" i want to show spinner's selected value intent.putExtra(Intent.EXTRA_TEXT, "Text"); startActivity(Intent.createChooser(intent, "Send Email")); } }); return rootView; } public void onTimePicked(Calendar time) { // display the selected time in the TextView textTime.setText(DateFormat.format("h:mm a", time)); } public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { Calendar c = Calendar.getInstance(); c.set(year, monthOfYear, dayOfMonth); setDate(c.getTime().getTime()); } private void setDate(long millisecond){ int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_SHOW_WEEKDAY | DateUtils.FORMAT_ABBREV_MONTH | DateUtils.FORMAT_ABBREV_WEEKDAY; String dateString = DateUtils.formatDateTime(getActivity(),millisecond, flags); textDate.setText(dateString); } } 

MainActivity.java:

 public class MainActivity extends SherlockFragmentActivity implements TimePickedListener, OnItemSelectedListener, OnDateSetListener { // Declare Variables Fragment1 fragmentTab1; ListView list; NavListAdapter adapter; String[] title; String[] subtitle; int[] icon; Fragment fragment1 = new Fragment1(); Fragment fragment2 = new Fragment2(); Fragment fragment3 = new Fragment3(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Generate title title = new String[] { "Title Fragment 1", "Title Fragment 2", "Title Fragment 3" }; // Generate subtitle subtitle = new String[] { "Subtitle Fragment 1", "Subtitle Fragment 2", "Subtitle Fragment 3" }; // Generate icon icon = new int[] { R.drawable.action_about, R.drawable.action_settings, R.drawable.collections_cloud }; // Pass results to NavListAdapter Class adapter = new NavListAdapter(this, title, subtitle, icon); // Hide the ActionBar Title getSupportActionBar().setDisplayShowTitleEnabled(false); // Create the Navigation List in your ActionBar getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); // Listen to navigation list clicks ActionBar.OnNavigationListener navlistener = new OnNavigationListener() { @Override public boolean onNavigationItemSelected(int position, long itemId) { FragmentTransaction ft = getSupportFragmentManager() .beginTransaction(); // Locate Position switch (position) { case 0: ft.replace(android.R.id.content, fragment1); break; case 1: ft.replace(android.R.id.content, fragment2); break; case 2: ft.replace(android.R.id.content, fragment3); break; } ft.commit(); return true; } }; // Set the NavListAdapter into the ActionBar Navigation getSupportActionBar().setListNavigationCallbacks(adapter, navlistener); } @Override public void onTimePicked(Calendar time) { // TODO Auto-generated method stub } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // On selecting a spinner item String item = parent.getItemAtPosition(position).toString(); // showing a toast on selecting an item Toast.makeText(parent.getContext(), item, Toast.LENGTH_LONG).show(); } public void onNothingSelected(AdapterView<?> arg0) { } @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { } } 

Para más claridad, estoy fijando capturas de pantalla, comprueba por favor y hágamelo saber, lo que estoy faltando.

Pantalla 1: se muestra como predeterminada

Introduzca aquí la descripción de la imagen

Pantalla 2: mostrando el diálogo de selección de tiempo

Introduzca aquí la descripción de la imagen

Pantalla 3: mostrando el diálogo del selector de fechas

Introduzca aquí la descripción de la imagen

También puede pasar el objeto DialogFragment a DialogFragment de TimePickerFragment y DatePickerFragment .

A continuación se muestra un resumen.

Cree el constructor de DatePickerFragment como parámetro de TextView y establezca la fecha en ese TextView.

 public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { TextView mTextView; DatePickerDialog mDatePickerDialog; public DatePickerFragment(TextView textview) { mTextView = textview; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { mDatePickerDialog = new DatePickerDialog(getActivity(), this, intYear, intMonth, intDay); return mDatePickerDialog; } @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { mTextView.setText(String.valueOf(dayOfMonth)+"/"+String.valueOf(monthOfYear+1)+"/"+String.valueOf(year)); } } 

¿Cómo pasar la vista de texto?

 DialogFragment newFragment = new DatePickerFragment(textDate); newFragment.show(getActivity().getSupportFragmentManager(), "datePicker"); 

Igual que para TimePickerFragment

 DialogFragment newFragment = new TimePickerFragment(textTime); newFragment.show(getActivity().getSupportFragmentManager(), "datePicker"); 

Trate de implementar su oyente en Fragment1 vez puesto que su texto está en la vista fragment1.

Sentido

 public class Fragment1 implements OnDateSetListener{ // Your regular methods and codes @Override public void onDateSet(DatePicker picker, int year, int month,int day) { int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_SHOW_WEEKDAY | DateUtils.FORMAT_ABBREV_MONTH | DateUtils.FORMAT_ABBREV_WEEKDAY; String dateString = DateUtils.formatDateTime(getActivity(),millisecond, flags); textDate.setText(dateString); } } 

Si necesita la fecha de su fragmento en su actividad puede codificar un getmethod en su fragmento

 public String getDate(){ return textDate.getText(); } 

El ejemplo sólo muestra para DatePicker, pero estoy seguro de que son capaces de hacer lo mismo para TimePicker.

Aclamaciones

  • ActionBarSherlock, ViewPager, TabsAdapter Fragmentos de tabulación anidados
  • ViewPager Actividad para notificar un fragmento de un evento específico
  • PreferenceFragment crashing, objeto nulo Referencia
  • Tecla Atrás en Fragmento añadido mediante programación lleva a contenedor vacío
  • Cuando se aplica onBackPressed en Fragment que extiende el diálogo Fragment
  • Implementación de DatePicker en Fragmento
  • Cómo borrar argumentos en Fragmento?
  • Fragmento de actualización de ViewPager en el dispositivo
  • no alcanzable después de usar .getActivity () en un fragmento
  • Insertar y quitar fragmentos en viewpager correctamente
  • Fragmentos en viewpager, no se encontró error de vista
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.