Android开发:如何通过Intent传递的value动态访问R.array资源?
解决方案
一、预先定义R.array字符串数组资源
Android的R.array是静态只读资源,无法在运行时动态修改或添加内容,必须先在res/values/arrays.xml中预先定义好需要的字符串数组:
<!-- res/values/arrays.xml --> <resources> <!-- 示例:定义名为"this_extra_text"的数组,存入你的额外文本 --> <string-array name="this_extra_text"> <item>第一条额外文本</item> <item>第二条额外文本</item> <item>第三条额外文本</item> </string-array> <!-- 如果需要根据value值对应不同数组,可定义多个数组 --> <string-array name="extra_text_0"> <item>value=0对应的文本</item> </string-array> <string-array name="extra_text_1"> <item>value=1对应的文本</item> </string-array> </resources>
二、动态根据value获取对应字符串数组
直接用R.array.value的写法错误,因为R.array的字段是编译时生成的常量,不能直接用变量访问。需要通过getResources().getIdentifier()方法,根据数组名称动态获取资源ID,再读取数组内容:
修改后的Activity代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); int value = getIntent().getIntExtra("key", 0); // 1. 根据value确定要访问的数组名称(可根据你的实际定义调整规则) String targetArrayName; if (value == 0) { targetArrayName = "this_extra_text"; // 对应你要存入的目标数组 } else { targetArrayName = "extra_text_" + value; // 其他value对应的数组 } // 2. 动态获取数组的资源ID int arrayResId = getResources().getIdentifier(targetArrayName, "array", getPackageName()); // 3. 读取数组内容(需判断资源是否存在,避免崩溃) if (arrayResId != 0) { String[] loveshayari = getResources().getStringArray(arrayResId); RecyclerView recyclerView = findViewById(R.id.recyclerview); recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); recyclerView.setAdapter(new MyAdapter(loveshayari, getApplicationContext())); } else { // 资源不存在的处理逻辑,比如显示提示 Toast.makeText(this, "对应数组资源不存在", Toast.LENGTH_SHORT).show(); } }
关键说明
getIdentifier()参数:第一个是资源名称,第二个是资源类型(这里填"array"),第三个是应用包名。- 若资源不存在,
getIdentifier()返回0,必须做判空处理,避免调用getStringArray(0)导致崩溃。
内容的提问来源于stack exchange,提问作者Protick Mirdha
相关产品推荐
相关产品推荐

