当前位置: 首页 > 知识库问答 >
问题:

如何在Android Studio中每天自动设置不同的文本到TextView?(

蒋奕
2023-03-14

我想开发day应用程序项目的报价。出于这个原因,我想在文本视图中显示每天不同的引用(格言)。报价将设置为24小时,并自动更改00:00:01。今天使用应用程序的人将看到第一个引号,第二天,当他们打开应用程序时,他们将看到第二个引号。第三天不同,第四天不同。。

但是我的代码没有显示不同的报价。每天显示第一天的报价。

下面是我的密码。

例如:day 1=to be or not to be. day 2=Money, Money, Money...

我的strings.xml

<resources>
    <string name="app_name">QuotesApp</string>
    <string-array name="quotes">
        <item>Learn from yesterday, live for today, hope for tomorrow.</item>
        <item>If you want to shine like the sun, first burn like the sun.</item>
        <item>Time never comes again.</item>
        <item>Wealth is the slave of wise man, the master of a fool.</item>
        <item>One thing only I know, and that is that I know nothing.</item>
        <item>A smooth sea never made a skilled sailor.</item>
    </string-array>
</resources>

我的主要活动。JAVA

TextView dailyGreetings;
    String[] mTestArray;
    DateFormat dateFormat= new SimpleDateFormat("dd-MM-yyyy");
    Date date=new Date();
    SharedPreferences preferences_Shared, text_Shared;
    SharedPreferences.Editor editor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);

        dailyGreetings=findViewById(R.id.dailyGreetings);
        mTestArray=getResources().getStringArray(R.array.quotes);
        preferences_Shared=this.getSharedPreferences("PREFERENCE",MODE_PRIVATE);
        text_Shared=this.getSharedPreferences("TEXT",MODE_PRIVATE);

        Calendar c=Calendar.getInstance();
        int timeofDay=c.get(Calendar.DAY_OF_MONTH);

        if (timeofDay>=1){
            if (preferences_Shared.getBoolean("isFirstRun", true)){
                dailyGreetings.setText(mTestArray[(0) %(mTestArray.length)]);
                saveDate();
            }else{
                if (!Objects.equals(preferences_Shared.getString("Date", ""), dateFormat.format(date)))
                {
                    int idx=new Random().nextInt(mTestArray.length);
                    dailyGreetings.setText(mTestArray[idx]);
                    text_Shared.edit().putString("TEXT", dailyGreetings.getText().toString()).apply();
                    saveDate();
                }
                else {
                    dailyGreetings.setText(text_Shared.getString("TEXT", ""));
                }
            }
        }
    }

    private void saveDate() {
        preferences_Shared=this.getSharedPreferences("PREFERENCE",MODE_PRIVATE);
        editor=preferences_Shared.edit();
        editor.clear();
        editor.putString("Date",dateFormat.format(date));
        editor.apply();
    }

共有1个答案

常坚
2023-03-14

我看不出将日期保存到共享首选项的目的。这对未来的约会有什么帮助?

我认为最简单的方法是获取当前日期,计算自某个恒定日期以来已经有多少天了(纪元就足够了),然后使用带有可用报价数量的余数运算符来逐日获取新报价。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
    setContentView(R.layout.activity_main)

    val dailyGreetings: TextView = findViewById(R.id.dailyGreetings)
    val quotes = resources.getStringArray(R.array.quotes)
    val daysSinceEpoch = LocalDate.now().toEpochDay()
    val quoteIndex = (daysSinceEpoch % quotes.size).toInt()
    dailyGreetings.text = quotes[quoteIndex]
}

如果你真的需要每天随机选择一个报价,而不是按照你定义的顺序浏览它们,有可能这有时意味着相同的报价会连续两天或更长时间被随机选择,那么你可以使用日期为种子的随机值,所以相同的日期总是会得到相同的随机值:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
    setContentView(R.layout.activity_main)

    val dailyGreetings: TextView = findViewById(R.id.dailyGreetings)
    val quotes = resources.getStringArray(R.array.quotes)
    val daysSinceEpoch = LocalDate.now().toEpochDay()
    val random = Random(daysSinceEpoch)
    dailyGreetings.text = quotes[random.nextInt(quotes.size)]
}
 类似资料:
  • 我现在有每天重复的通知,每天下午6点重复。我想做的是不是6pm,而是在事件即将开始时显示通知。我有一个events arraylist,它包含日期和时间,这是可能的。下面是我当前显示通知的方式。 这是我主要的activity 这是在我的broadcast_reciever课上 公共类AlarmReceiver扩展了 我不确定如何设置时间,所以它会重复什么时候和如果有一个事件。感谢您的任何指点和帮助

  • 本文向大家介绍CentOS系统下如何设置mysql每天自动备份,包括了CentOS系统下如何设置mysql每天自动备份的使用技巧和注意事项,需要的朋友参考一下 前言 大家都知道数据是一个比较重要的数据,经常需要备份,每次都手动比较麻烦。通过本文来一起来看看CentOS系统下如何设置mysql每天自动备份吧。 步骤如下 建备份文件夹: 建脚本文件: 打开文件 在脚本中加入如下内容: 检查有没安装cr

  • 我安装了Java1.7.0_21,卸载了以前的版本后,今天安装了1.7.0_45。现在Android Studio已经停止编译项目,并表示无法找到1.7.0_21文件夹。如何为Java SDK设置新路径?我也改变了环境变量,但不起作用。

  • 问题内容: 我正在尝试在Android Studio中使用Java版本1.7,但是很遗憾,它无法正常工作…如果将版本设置为 但是,当我使用带有字符串的声明语句时,出现了在Java 1.7中应该发生的错误,因此我是否需要设置其他设置? 问题答案: 不,没有设置可更改。Android SDK不支持完整的Java 7语法,因此您不能使用它。 请注意,最新的android版本支持java.nio。*(ja

  • 我已经研究了如何更改Angulal-Chart.js的颜色,但它涉及整个(数据集)的颜色,而不是特定的条。 我要寻找的是一种在条形图中为每个条形应用不同颜色的方法;从图表到角度。 所以,我有一个条形图: 使用以下角度代码(当然是在控制器中) 其中将返回随机颜色。 现在,字段将此颜色应用于所有条: 当我真的想为每个酒吧不同的颜色: 柱塞

  • 我正在使用处理。我有大约5个。因此,我将spring cloud config server配置为集中配置。它工作得很好。 配置服务器配置 spring.cloud.config.server.native.search-locations=classpath://common-config server.port=8888 现在的问题是,我有两个环境和,并且我创建了和,根据spring文档,我需