【问题标题】:Populate spinner with years dynamically in Android?在Android中动态填充微调器?
【发布时间】:2013-04-01 15:16:43
【问题描述】:

我一直在绞尽脑汁试图让它发挥作用。我想从 1900 年到当前年份动态输入微调器。我不认为使用 XML 定义的数组可以做到这一点,但我可以使用数组适配器来做到这一点吗?这是我目前所拥有的:

ArrayList<String> years = new ArrayList<String>();
int thisYear = Calendar.getInstance().get(Calendar.YEAR);

for (int i = 1900; i <= thisYear; i++) 
{
    years.add(i);
}

adapter = new ArrayAdapter<String>(this, 
           android.R.layout.simple_spinner_item, years);

//spinner to enter this list to
spinYear = (Spinner)findViewById(R.id.yearspin);

这是微调器的 XML:

<Spinner
        android:id="@+id/yearspin"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

感谢您的帮助。

【问题讨论】:

  • 在代码中添加spinYear.setAdapter(adapter) 会发生什么?
  • 你说得对!谢谢!

标签: android dynamic insert spinner


【解决方案1】:

你很亲密。试试这个:

ArrayList<String> years = new ArrayList<String>();
int thisYear = Calendar.getInstance().get(Calendar.YEAR);
for (int i = 1900; i <= thisYear; i++) {
    years.add(Integer.toString(i));
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, years);

Spinner spinYear = (Spinner)findViewById(R.id.yearspin);
spinYear.setAdapter(adapter);

你忘了添加

spinYear.setAdapter(adapter);

【讨论】:

  • 详细说明,您错过了使用 Integer.toString(i); 从整数到字符串的转换,并且您忘记了对 setAdapter() 的调用
  • 太好了,问题解决了!我需要做的就是设置适配器! 掌心
  • @vincentjames501 如何设置微调器以显示当前年份并仅在选择不同年份时更改?
【解决方案2】:

希望对你有帮助。

static final String[] Months = new String[] { "January", "February",
            "March", "April", "May", "June", "July", "August", "September",
            "October", "November", "December" };

 // Set years
        ArrayList<String> years = new ArrayList<String>();
        int thisYear = Calendar.getInstance().get(Calendar.YEAR);
        for (int i = 1900; i <= thisYear; i++) {
            years.add(Integer.toString(i));
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, years);

        Spinner spinYear = (Spinner)findViewById(R.id.spinnerYears);
        spinYear.setAdapter(adapter);
        // Set months
        ArrayAdapter<String> adapterMonths = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, Months);
        adapterMonths.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        Spinner spinMonths = (Spinner)findViewById(R.id.spinnerMonths);
        spinMonths.setAdapter(adapterMonths);
        // Set days
        ArrayList<String> days = new ArrayList<String>();
        for (int i = 1; i <= 31; i++) {
            days.add(Integer.toString(i));
        }
        ArrayAdapter<String> adapterDays = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, days);

        Spinner spinDays = (Spinner)findViewById(R.id.spinnerDays);
        spinDays.setAdapter(adapterDays);

【讨论】:

    【解决方案3】:

    我建议简单的:

    ArrayList<String> yearsList = new ArrayList<>();
    int current_year = Calendar.getInstance().get(Calendar.YEAR);
    int count = 60;
    for (int i = 0; i < count; i++) {
        yearsList.add(Integer.toString(current_year - i));
    }
    
    ArrayAdapter<String> yearsAdapter = new ArrayAdapter<>(getContext(), R.layout.dropdown_item, yearsList);
    spinYear.setAdapter(yearsAdapter);
    

    只需将 int count 的值更改为要在当前年份之前打印多少年。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      相关资源
      最近更新 更多