如何在微调器中显示选项,选中后将该选项保存为整数变量?

时间:2013-09-26 19:57:43

标签: java android arrays string spinner

我正在开发一款可以帮助租赁业务的应用。我有一个微调器从阵列中提取它的内容......

来自datalist.xml:

<string-array name="dur"> 
    <item>@string/dur1</item>
    <item>@string/dur2</item>
    <item>@string/dur3</item>
    <item>@string/dur4</item>
    <item>@string/dur5</item>
    <item>@string/dur6</item>
    <item>@string/dur7</item>
    <item>@string/dur8</item>
    <item>@string/dur9</item>
    <item>@string/dur10</item>
    <item>@string/dur11</item>
</string-array> 

strings.xml:

<string name="dur1">Half hour</string>
<string name="dur2">1 hour</string>
<string name="dur3">2 hours</string>
<string name="dur4">3 hours</string>
<string name="dur5">4 hours</string>
<string name="dur6">5 hours</string>
<string name="dur7">6 hours</string>
<string name="dur8">Over night</string>
<string name="dur9">24 hours</string>
<string name="dur10">Week</string>
<string name="dur11">Month</string>

java中的Spinner代码:

Spinner spinner = (Spinner) findViewById(R.id.spinnerDuration);     
    ArrayAdapter <CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.dur, android.R.layout.simple_spinner_item);     
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter);        
    spinner.setOnItemSelectedListener(
        new OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            int index = arg0.getSelectedItemPosition();
            // storing string resources into Array 
            dur = getResources().getStringArray(R.array.dur);
        }       
        public void onNothingSelected(AdapterView<?> arg0) { 
            // do nothing
        }
    }
);

如何设置它,以便当用户从微调器中选择一个选项时,它会将该选项保存为整数变量,反映小时数,然后可以在此应用程序的其他部分中使用?

例如......有人选择“3小时”并将一个名为“durnumb”的变量保存为3.或者某人选择“周”并将durnumb的值保存为168(24小时x 7天)

2 个答案:

答案 0 :(得分:2)

在共享偏好设置中保存字符串,然后在应用中的任意位置再次检索它。

public class PreferencesData {

    public static void saveStringAsInt(Context context, String key, String value) {
        SharedPreferences sharedPrefs = PreferenceManager
                .getDefaultSharedPreferences(context);
        try {
            int intValue = Integer.parseInt(value);
            sharedPrefs.edit().putInt(key, intValue).commit();
        } catch (NumberFormatException e) {
            Log.e("PreferencesData", "Unable to parse to int: " + value)
        }
    }

    public static int getInt(Context context, String key, int defaultValue) {
        SharedPreferences sharedPrefs = PreferenceManager
                .getDefaultSharedPreferences(context);
        return sharedPrefs.getInt(key, defaultValue);
    }
}

用法:

// save
// do string manipulation before parsing e.g "weeks" = "168" or "3 hours" = "3" (for example substring away first encounter of whitespace)
PreferencesData.saveStringAsInt(context, "weeks", "25");
// retrieve
int weeks = PreferencesData.getInt(context, "weeks", -1);

至于从几周或“3小时”到“3”的翻译,我无法提供建议,因为它非常依赖于您的需求。对于每个用例,这应该是一个单独的方法。

没有理由为什么翻译不应该直接转换为Integer并将其传递给PreferencesData.saveInt()这样的方法,但是你的问题似乎集中在String值上,这就是为什么它很可能很方便转换为可以说是“即时”字符串到整数'。

答案 1 :(得分:0)

最简单的方法就是这样做:

  

public static final int [] array = new int [] {1,2,4,6,etc ...};

并按职位获得价值。