java 微调_java - 如何创建微调框以显示当前日期和接下来的30个日期

如何创建日期微调器,该日期将EditText中的当前日期显示为默认值,并在Spinner中显示将来的日期(例如接下来的30天)

我在许多应用程序中使用了日期选择器,因此我熟悉日期选择器对话框,但对日期微调器一无所知。

注意

请不要告诉我如何将EditText设置为Spinner

编辑:1以@erakitin推荐@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_date);

Spinner spinnerDateIn = (Spinner) findViewById(R.id.spinnerDateIn);

Spinner spinnerDateOut = (Spinner) findViewById(R.id.spinnerDateOut);

spinnerDateIn.setAdapter(new CalendarSpinnerAdapter(SpinnerDateActivity.this, 30));

}

编辑:2由@erakitin在新更新中推荐

CalendarSpinnerAdapter mSpinnerDateInAdapter = new CalendarSpinnerAdapter(SpinnerDateActivity.this, 30);

spinnerDate.setAdapter(mSpinnerDateInAdapter);

spinnerDate.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

@Override

public void onItemSelected(AdapterView> parent, View view, int position, long id) {

spinnerDate.setSelection(position);

}

@Override

public void onNothingSelected(AdapterView> parent) {

}

});

现在,尝试获取String中选定项的值,但得到:java.util.GregorianCalendar,我在哪里出错?

strDate = spinnerDate.getSelectedItem().toString();

最佳答案

下面有一个简单的Spinner适配器示例。public class CalendarSpinnerAdapter extends BaseAdapter {

private SimpleDateFormat mDateFormat = new SimpleDateFormat("d MMM yyyy");

private LayoutInflater mInflater;

private Calendar mCalendar;

private int mDayCount;

private int mLastRequestedDay = 0;

public CalendarSpinnerAdapter(Context context, int dayCount) {

mInflater = LayoutInflater.from(context);

mDayCount = dayCount;

mCalendar = Calendar.getInstance();

}

@Override

public int getCount() {

return mDayCount;

}

@Override

public Calendar getItem(int position) {

mCalendar.add(Calendar.DAY_OF_YEAR, position - mLastRequestedDay);

mLastRequestedDay = position;

return mCalendar;

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

if (convertView == null) {

convertView = mInflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);

}

Calendar item = getItem(position);

((TextView) convertView).setText(mDateFormat.format(item.getTimeInMillis()));

return convertView;

}

@Override

public View getDropDownView(int position, View convertView, ViewGroup parent) {

return getView(position, convertView, parent);

}

}

如何使用它显示当前日期和 future 29天:

mDateSpinner.setAdapter(new CalendarSpinnerAdapter(getActivity(), 30));

UPD:

我们应该向适配器的构造函数添加一个参数以设置开始日期:

public CalendarSpinnerAdapter(Context context, Calendar startDate, int dayCount) {

mInflater = LayoutInflater.from(context);

mDayCount = dayCount;

mCalendar = Calendar.getInstance();

mCalendar.setTimeInMillis(startDate.getTimeInMillis());

}

然后为spinnerDateIn添加侦听器,我们可以在其中初始化第二个微调器:

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_date);

Spinner spinnerDateIn = (Spinner) findViewById(R.id.spinnerDateIn);

final Spinner spinnerDateOut = (Spinner) findViewById(R.id.spinnerDateOut);

mSpinnerDateInAdapter = new CalendarSpinnerAdapter(SpinnerDateActivity.this, Calendar.getInstance(), 30);

spinnerDateIn.setAdapter(mSpinnerDateInAdapter);

spinnerDateIn.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

@Override

public void onItemSelected(AdapterView> parent, View view, int position, long id) {

Calendar dateIn = Calendar.getInstance();

dateIn.setTimeInMillis(mSpinnerDateInAdapter.getItem(position).getTimeInMillis());

dateIn.add(Calendar.DAY_OF_YEAR, 1); // add one day

mSpinnerDateOutAdapter = new CalendarSpinnerAdapter(SpinnerDateActivity.this, dateIn, 30);

spinnerDateOut.setAdapter(mSpinnerDateOutAdapter);

}

@Override

public void onNothingSelected(AdapterView> parent) {

}

});

}

我没有尝试此代码,但它应该可以工作。

UPD2:

spinnerDate.setSelection(position)返回Calendar类实例。如果要获取所选日期作为String,则应设置其格式。尝试使用以下方法:

private String getSelectedDateAsString(Spinner dateSpinner) {

Calendar selectedDate = (Calendar) dateSpinner.getSelectedItem();

return new SimpleDateFormat("d MMM yyyy").format(selectedDate.getTimeInMillis());

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值