android – 如何在Fragment中将选定的Dialog值设置为TextViews

前端之家收集整理的这篇文章主要介绍了android – 如何在Fragment中将选定的Dialog值设置为TextViews前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

参见英文答案 > Get date from datepicker using dialogfragment                                    8个
我正在使用Fragments编写一个Android应用程序,在我的一个片段中,我正在使用两个选择器(Date& Time).

我用谷歌搜索并找到解决方案,通过使用点按按钮显示片段中的Dialogs,我也这样做,每当用户点击相应的按钮时显示对话框.

但我没有得到如何将对话框值设置为各自的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
            Listdio 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,"mail@emailaddress.com");
                    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

为了更清晰,我发布屏幕截图,请检查并让我知道,我错过了什么.

屏幕1:显示为默认值

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

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

最佳答案
您还可以将TextView的对象传递给TimePickerFragment&的DialogFragment. DatePickerFragment.

以下是示例概述.

创建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(),intYear,intMonth,intDay);

         return mDatePickerDialog;
    }

    @Override
    public void onDateSet(DatePicker view,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");

猜你在找的Android相关文章