Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set selected Dialog values to TextViews in Fragment [duplicate]

I am writing a Android App using Fragments, and in one of my fragment i am using two pickers (Date & Time).

I googled and found the solution to show Dialogs in Fragment by using tap on button, and i am doing same, showing dialogs whenever user do click on respective button(s).

but i am not getting how to set dialog values to their respective TextView(s).

see my below code, i am using to show dialogs by using tap on buttons,

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


     }  
}

for more Clearity, i am posting screen shots, please check and let me know, what i am missing.

Screen 1: showing as default

enter image description here

screen 2: showing time picker dialog

enter image description here

screen 3: showing date picker dialog

enter image description here

like image 913
Sun Avatar asked Oct 02 '22 13:10

Sun


1 Answers

You can also pass TextView's object to DialogFragment of TimePickerFragment & DatePickerFragment.

Below is sample overview.

create constructor of DatePickerFragment as parameter of TextView and set date on that 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));
    }
}

How to pass textview ?

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

same as for TimePickerFragment

DialogFragment newFragment = new TimePickerFragment(textTime);
newFragment.show(getActivity().getSupportFragmentManager(), "datePicker");
like image 65
Niranj Patel Avatar answered Oct 05 '22 13:10

Niranj Patel