如何从MaterialDatePicker获取日期?

问题描述

我的应用程序使用MaterialDatePicker。我想创建一个除其他数据外的类,该类将存储MaterialDatePicker中的日期。 我有一些问题:

  1. 如果应该更改日期,最好的方法是将日期保存在班级中?
  2. 如何从日期选择器材料中获取日期? 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.

这是我在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,ITEMS);
    ArrayAdapter adapterNotif = new ArrayAdapter(this,listNotif);
    etNotif.setAdapter(adapterNotif);



}

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

这是我将来上课的代码,但是因为我在考虑日期,所以其中没有任何内容

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";
}

}

解决方法

要获取日期,请使用:

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

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

通过这种方式,您可以将选定的日期设置为毫秒。
如果要格式化为字符串,可以使用类似以下内容的

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...