1

我正在开发一个可以帮助租赁业务的应用程序。我有一个微调器,它从数组中提取它的内容......

从 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> 

字符串.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) 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 天)

4

2 回答 2

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 值上,这就是为什么从 String 转换为 Integer 很可能很方便的原因“在飞行中”可以这么说。

于 2013-09-26T20:15:37.027 回答
0

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

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

并按位置获取价值。

于 2013-09-26T20:11:06.240 回答