Android上下文未获得正确的本地化资源

pgx2nnw8  于 2022-12-31  发布在  Android
关注(0)|答案(1)|浏览(166)

描述:我有一个应用程序,添加保存和显示活动对象,并显示一个Toast消息这样做。我也有两种语言的程序运行,为它们提供了资源文件。
问题:除了成功时显示的Toast消息外,翻译对所有UI元素都能完美工作。我正在为它提供应用程序上下文,但如果我切换语言,它将以另一种语言显示Toast,而另一个UI使用正确的语言。两种语言的资源不包含相同的string。我做错了什么?
以下是活动保存代码的一部分:

private void uploadActivities(FirebaseFirestore db, ArrayList<ActivityModel> activities) {
        for (int i = 0; i < allRecurringActivities.size(); i++) {
            db.collection("Project").document(Prefs.getString("iD",
                    GlobalObject.FIRESTORE_ID))
                    .collection("activities")
                    .document(activities.get(i).getId())
                    .set(activities.get(i))
                    .addOnSuccessListener(unused -> {
                        Toast.makeText(context, "" +
                                context.getApplicationContext().getResources().getString(R.string.success) +
                                "!", Toast.LENGTH_SHORT).show();
                        for (ActivityModel allRecurringActivity : allRecurringActivities) {
                            AlarmUtils.setAlarm(context, allRecurringActivity);
                        }
                            }
                    )
                    .addOnFailureListener(e -> Log.d("uploadActivities", "FAILED"));
        }
    }
y1aodyip

y1aodyip1#

Activity用作字符串等面向用户的元素的Context,而不是Application
很多资源覆盖机制,比如应用内语言切换器,都是通过更新Activity中的资源来实现的,其他的Context没有更新,在问题中你使用的应用内语言切换并不明显(尽管这可以解释这种行为)-没有它,Application也可以访问相同的资源。Activity是用于用户界面的正确上下文。

相关问题