简体   繁体   中英

How can I get the date from MaterialDatePicker?

My application uses MaterialDatePicker. I want to create a class that, among other data, will store the date from the MaterialDatePicker. I have some questions:

  1. What is the best way to save the date in the class if it is supposed to be changeable?
  2. How to get the date from the date picker material for this? Here's my activity where I'm using the date picker material. By clicking on the checkbox, I want to save all this information, including the date, into a class object.

Here is my code of activity with MaterialDatePicker

public class NewEvent extends AppCompatActivity {
TextInputEditText etDate, etEventId;
AutoCompleteTextView etType, etNotif;
MaterialToolbar toolbarNE;
SharedPreferences sharedPreferences;

private static final String TAG = "myLogs";
static final String newEv = "newEv";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.new_event);
    final FragmentManager fragmentManager = getSupportFragmentManager();
    final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    final FirstFragment fragment1 = new FirstFragment();

    etDate = findViewById(R.id.etDate);
    etType = findViewById(R.id.etType);
    etNotif = findViewById(R.id.etNotif);
    etEventId = findViewById(R.id.etEventId);
    toolbarNE = findViewById(R.id.menuNewEvent);

    toolbarNE.setOnMenuItemClickListener(new MaterialToolbar.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch(item.getItemId())
            {
                case R.id.applyEvent:
                    /*Bundle bundle = new Bundle();
                    bundle.putString("name", (String) etEventId.getText().toString());
                    fragment1.setArguments(bundle);
                    fragmentTransaction.replace(R.id.q3, fragment1);
                    fragmentTransaction.addToBackStack(null);
                    fragmentTransaction.commit();*/

                    Intent intent = new Intent(NewEvent.this, FirstFragment.class);
                    intent.putExtra("name", (String) etEventId.getText().toString());
                    setResult(RESULT_OK, intent);


                    finish();
                    //Toast.makeText(getApplicationContext(), materialDatePicker.getHeaderText(), Toast.LENGTH_SHORT).show();

                    return true;
            }
            return false;
        }
    });



    // MaterialDatePicker stuff

    MaterialDatePicker.Builder builder = MaterialDatePicker.Builder.datePicker();
    builder.setTitleText("Выберите дату");
    final MaterialDatePicker materialDatePicker = builder.build();


    etDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            materialDatePicker.show(getSupportFragmentManager(), "DATE_PICKER");
        }
    });

    materialDatePicker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener() {
        @Override
        public void onPositiveButtonClick(Object selection) {
            etDate.setText(materialDatePicker.getHeaderText());

        }
    });



    // Тип события
    List listEvent = new ArrayList();
    Collections.addAll(listEvent, "Material", "Shit");
    ArrayAdapter adapterEvent = new ArrayAdapter(this,R.layout.list_item,listEvent);
    etType.setAdapter(adapterEvent);

    // Тип уведомления
    List listNotif = new ArrayList();
    //items.add("Material");
    //items.add("Shit");
    Collections.addAll(listNotif, "Каждый день", "Раз в 2 дня", "Раз в 3 дня", "Раз в 5 дней", "Раз в неделю", "Не напоминать");
    //String [] ITEMS = new String[] {"S1", "S2", "S3"};
    //ArrayAdapter<String> ad = new ArrayAdapter<String>(this, R.layout.list_item, ITEMS);
    ArrayAdapter adapterNotif = new ArrayAdapter(this,R.layout.list_item, listNotif);
    etNotif.setAdapter(adapterNotif);



}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}

Here is my code for the future class, but there is nothing in it yet, because I was thinking about the date.

public class Event {
public String Name;
public String Date;   // I don't know what type of variable to specify here, so far I have specified a string.
public String Comment;
public String Type;
public String Notify;



Event()
{
    Name = "Событие";
    Date = "Date";
    Comment = "Comment";
    Type = "Type";
    Notify = "Notify";
}

}

To get the date use:

MaterialDatePicker<Long> picker = builder.build();

picker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener<Long>() {
      @Override public void onPositiveButtonClick(Long selection) {
        // Do something...
      }
    });

In this way you have the selected date as milliseconds.
If you want to format as a String you can use something like:

Calendar utc = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
utc.setTimeInMillis(selection);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String formatted = format.format(utc.getTime());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM