Android ViewPager中从String.xml获取字符串的实现方案
改造DietSlideAdapter从Strings.xml读取字符串数组
没问题,咱们直接一步步来,既能保留原代码的结构和技术术语,又能把硬编码的字符串迁移到Strings.xml中,完全符合Android的资源管理最佳实践:
第一步:在Strings.xml中定义字符串数组
先打开res/values/strings.xml,添加对应的字符串数组资源,把原来硬编码的标题和描述内容放进去:
<!-- 幻灯片标题数组 --> <string-array name="slide_headings"> <item>heading1</item> <item>heading2</item> <item>heading3</item> <item>heading4</item> <item>heading5</item> </string-array> <!-- 幻灯片描述数组 --> <string-array name="slide_descriptions"> <item>Try fortified ready-to-eat or cooked breakfast cereals with frui...</item> <!-- 记得补充剩余4条描述,保持和图片数组长度一致,避免索引越界 --> </string-array>
第二步:修改DietSlideAdapter类
接下来调整你的DietSlideAdapter,去掉硬编码的字符串数组,改用Context的资源方法从Strings.xml中加载数据,同时完整保留原有的类结构、变量命名和继承关系:
public class DietSlideAdapter extends PagerAdapter { Context context; LayoutInflater layoutInflater; // 图片数组保留原定义 public int[] slide_images2 = { R.drawable.breakfast, R.drawable.cabbage, R.drawable.protein, R.drawable.fish, R.drawable.tea }; // 字符串数组改为声明后在构造方法中初始化 public String[] slide_headings2; public String[] slide_descs2; public DietSlideAdapter(Context context){ this.context = context; // 从Strings.xml加载字符串数组 slide_headings2 = context.getResources().getStringArray(R.array.slide_headings); slide_descs2 = context.getResources().getStringArray(R.array.slide_descriptions); // 兼容性提示:如果需要适配API 21以下版本,可以用ResourcesCompat // slide_headings2 = ResourcesCompat.getStringArray(context.getResources(), R.array.slide_headings); } // 注意:PagerAdapter必须重写的核心方法要保留(原代码未贴全,这里补充提醒) @Override public int getCount() { return slide_images2.length; // 保持和图片数组长度一致 } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } // 其他PagerAdapter重写方法请根据原有业务逻辑补充 }
关键注意点
- 务必保证
slide_headings、slide_descriptions数组的长度和slide_images2一致,否则滑动时会出现数组越界异常 - 这种写法支持自动适配语言切换等配置变化,比硬编码灵活得多,也更符合Android开发规范
内容的提问来源于stack exchange,提问作者H M Sadman Haque




