问题描述
我的应用程序使用MaterialDatePicker。我想创建一个除其他数据外的类,该类将存储MaterialDatePicker中的日期。 我有一些问题:
- 如果应该更改日期,最好的方法是将日期保存在班级中?
- 如何从日期选择器材料中获取日期? 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());