响应startActivityForResult

时间:2011-12-30 05:53:36

标签: java android

我正在尝试使用startActivityForResult响应活动的结果。我得到了预期的结果,但我不确定如何回应结果。我想做的是根据结果调用另一个ArrayList(这是一个资源)。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        Bundle d = data.getExtras();
        String oil = d.getString("oil");
        Resources res = getResources();
        String[] oil_info = res.getStringArray(R.array.OIL);
        ...
    } 
}

我希望R.array.OIL能够根据结果进行更改。即如果oil ='BASIL'将R.array.OIL更改为R.array.BASIL。我想过制作一个hashmap但是无法弄清楚如何将R.array.OIL放入一个hashmap中,因为你不能将基元放在一个hashmap中。我是android和java的新手,所以我确信有更好的方法来做到这一点。任何帮助将非常感激。感谢。

2 个答案:

答案 0 :(得分:1)

根据您的要求使用getIdentifier(),如下所示。

e.g。在数组类型2项中有OIL和BASIL具有不同的值。 你可以访问R.array.OIL和R.array.BASIL。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        Bundle d = data.getExtras();
        String oil = d.getString("oil");
        Resources res = getResources();
        int id = res.getIdentifier(oil, "array", getPackageName());
        String[] oil_info = res.getStringArray(id);
        ...
    } 
}

在上面的代码中,如果字符串oil"OIL",则id将变为R.array.OILoil"BASIL",然后id将成为R.array.BASIL

答案 1 :(得分:0)

您正在尝试的实际上是永久存储的尝试。 “Res”文件夹或“R.smthing.smthing”数据不允许这样做。 使用shared preferences进行原始存储。 看看是否可以通过sharedPreferences保存数组,否则使用序列化或SQLite数据库。