2014-02-17 111 views
5

集中选择对话框值TextViews我写一个Android应用程序使用片段,并在我的片段之一,我正在用两个选择器(日期&时间)如何在碎片

我一派,发现溶液通过使用按钮抽头,以显示在片段对话框,以及我在做相同,表示对话框每当用户做点击相应按钮(多个)

但我没有得到如何设置对话框值到其各自的TextView

看我下面的代码,我使用使用上的按钮手势可显示对话框,

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


    } 
} 

更多Clearity,我张贴的屏幕截图,请让我知道,我错过了什么。

屏幕1:表示作为默认

enter image description here

屏幕2:表示时间选择器对话框

enter image description here

屏幕3:表示日期选择器对话框

enter image description here

+0

您可以加入更多的细节,以你想插入到你的textviews什么? – Anthony

+0

用户使用相应的对话框选择的值(日期和时间),这就是为什么我使用两个按钮和两个文本视图,你可以看到在片段1 – Sun

+0

你对从对话框中获取结果或格式化setText的结果感到困惑吗? – Anthony

回答

4

您也可以通过TextView的对象的TimePickerFragment & DatePickerFragmentDialogFragment

下面是示例概述。

创建DatePickerFragment的构造函数作为参数TextView并在该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)); 
    } 
} 

如何通过textview?

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

相同TimePickerFragment

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

已经存在... – Sun

+0

@AbrahimNeil什么? –

+0

我的意思是尝试过但没有解决,你可以试试这个吗? – Sun

0

尝试在Fragment1中实现您的侦听器,因为您的textview在fragment1视图中。

含义

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

    } 
} 

如果你需要从你的片段日期在活动,你可以在你的片段编写一个getmethod

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

的例子只显示DatePicker的,但我相信你是能够为TimePicker做同样的事情。

干杯