5

ich ausgewählt Set schreibe eine Android App mit Fragmente, und in einem meiner Fragment ich bin mit zwei Kommissionierer (Datum & Time).Wie Dialog Werte Textviews in Fragment

ich gegoogelt und fand die Lösung auf die Schaltfläche unter Verwendung von Leitungs Dialoge im Fragment zu zeigen, und ich gleiche tue, zeigt Dialoge, wenn Benutzer auf den entsprechenden Button klicken Sie (n).

aber ich bin nicht immer, wie Werte in den Dialog ihren jeweiligen Textview setzen (s).

siehe meinen Code unten, ich bin mit Dialogen zeigen, indem sie auf Schaltflächen tippen,

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 (i.e. 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) { 


    } 
} 

für mehr Clearity, ich bin Entsendung Screenshots, überprüfen Sie bitte, und lassen Sie mich wissen, was ich bin fehlt.

Bildschirm 1: als Standard zeigt

enter image description here

Bildschirm 2: zeigt Zeitauswahl Dialog

enter image description here

Bildschirm 3: zeigt Datumsauswahl-Dialog

enter image description here

+0

Könnten Sie mehr Details hinzufügen, was Sie versuchen, in Ihre Textviews einfügen? – Anthony

+0

ausgewählter Wert (Datum & Zeit) durch den Benutzer mit entsprechenden Dialogen, deshalb verwende ich zwei Schaltflächen und zwei Textansichten, wie Sie in Fragment1 sehen – Sun

+0

Sind Sie verwirrt über das Ergebnis aus dem Dialog oder Formatierung dieses Ergebnis für den SetText? – Anthony

Antwort

4

Sie können auch TextView ‚s Objekt DialogFragment von TimePickerFragment & DatePickerFragment passieren.

Unten finden Sie eine Beispielübersicht.

Erzeuge Konstruktor von DatePickerFragment als Parameter von TextView und setze Datum auf diesem 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)); 
    } 
} 

Wie Textview übergeben?

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

gleiche wie für TimePickerFragment

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

schon da ... – Sun

+0

@AbrahimNeil was ?? –

+0

ich meine versucht, aber nicht gelöst, können Sie das für mich ausprobieren? – Sun

0

Versuchen Sie, Ihren Listener in Fragment1 zu implementieren, da sich Ihre Textansicht in der fragment1-Ansicht befindet.

Bedeutung

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

    } 
} 

Wenn Sie das Datum aus dem Fragment in Ihrer Tätigkeit benötigen Sie einen GetMethod in Ihrem Fragment codieren können

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

Das Beispiel zeigt nur für Datepicker, aber ich bin sicher, Sie sind kann das gleiche für TimePicker tun.

Prost

Verwandte Themen