You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按每日顺序获取strings.xml数组值并每日更新文本框内容?

问题解决:每日依次从数组取文本并更新

你的核心问题是当前代码用随机索引选文本,且未保存当前索引状态,导致无法按顺序每日切换下一个数组元素。以下是修正方案:

问题分析

  1. 现有代码使用Random()随机获取索引,不符合「依次取值」的需求
  2. 仅保存文本内容而非当前索引,无法追踪下一个要显示的元素位置
  3. 日期判断逻辑错误:Calendar.DAY_OF_YEAR是一年中的第几天(1-366),0<=timeOfDay<24的条件无意义

修正方案

我们需要通过SharedPreferences保存当前使用的数组索引和最后更新的日期,每日切换时递增索引(超出数组长度则循环)。

修改后的Java代码

mTestArray = getResources().getStringArray(R.array.morning);
SharedPreferences prefs = this.getSharedPreferences("DAILY_GREETINGS", MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();

// 获取当前日期(格式化为yyyy-MM-dd,确保每日唯一)
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
String currentDate = dateFormat.format(new Date());

// 获取存储的状态
int currentIndex = prefs.getInt("CURRENT_INDEX", 0);
String lastUpdateDate = prefs.getString("LAST_UPDATE_DATE", "");
boolean isFirstRun = prefs.getBoolean("IS_FIRST_RUN", true);

if (isFirstRun) {
    // 首次运行:显示第一个元素,初始化状态
    dailyGreetings.setText(mTestArray[0]);
    editor.putInt("CURRENT_INDEX", 0);
    editor.putString("LAST_UPDATE_DATE", currentDate);
    editor.putBoolean("IS_FIRST_RUN", false);
    editor.apply();
} else {
    if (!currentDate.equals(lastUpdateDate)) {
        // 日期已变:计算下一个索引,循环遍历数组
        currentIndex = (currentIndex + 1) % mTestArray.length;
        dailyGreetings.setText(mTestArray[currentIndex]);
        // 更新存储的索引和日期
        editor.putInt("CURRENT_INDEX", currentIndex);
        editor.putString("LAST_UPDATE_DATE", currentDate);
        editor.apply();
    } else {
        // 当日重复打开:显示当前索引对应的文本
        dailyGreetings.setText(mTestArray[currentIndex]);
    }
}

说明

  • 用CURRENT_INDEX跟踪当前显示的数组元素位置,每日递增后取模数组长度实现循环
  • 用LAST_UPDATE_DATE(格式化为yyyy-MM-dd)判断是否需要更新文本
  • 统一使用一个SharedPreferences实例管理所有状态,避免多个实例的混乱
  • 去掉了无意义的DAY_OF_YEAR判断,直接通过日期字符串对比判断是否跨日

strings.xml无需修改,保持原数组即可。

内容的提问来源于stack exchange,提问作者Latife Turan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 05:05:16