有没有更好的方法来解析大型 Android 应用程序的字符串资源?

问题描述

我正在制作一个学习中文的应用程序。每节课在一个滚动视图中包含 10 个 TextView,我计划最终总共有 500 节课。更改课程会更改每个相应 TextView 的文本。以下是前两节课的屏幕截图。

enter image description here

enter image description here

我将整个课程的所有句子存储在我的 strings.xml 资源文件中的一维数组中。

<array name="course">
    <!--Lesson 1-->
    <item name="l1s1">好。Hǎo. Good,okay.</item>
    <item name="l1s2">不好。Bù hǎo. Not good,not okay.</item>
    <item name="l1s3">好不好?Hǎo bù hǎo? Okay?</item>
    <item name="l1s4">很好。Hěn hǎo. Very good.</item>
    <!--LOTS MORE LESSONS AND ITEMS HERE-->
</array>

我本来希望在整个课程中使用二维数组,并为每节课使用一个子数组,但我收到“无法编译值文件”的消息。当我尝试在 Android Studio 中运行我的程序时出现错误消息。这里似乎只允许使用一维数组,所以这就是我在 onCreate() 方法中以编程方式解析 strings.xml 文件的方式。

sentenceArray = getResources().getStringArray(R.array.course);
sentenceList = new ArrayList<>(Arrays.asList(sentenceArray));
lessonList = new ArrayList<>();
numberOfSentences = sentenceList.size();
numberOfLessons = numberOfSentences / 10;
lessonNumber = 1;

//populates lists of lessons and sentences from strings.xml
//note that all lessons must contain exactly ten sentences
int index = 0;
for (int i = 0; i < numberOfLessons; i++) {
    List<String> lesson = new ArrayList<>();
    for (int j = 0; j < 10; j++) {
        lesson.add(sentenceList.get(index));
        index++;
    }
    lessonList.add(lesson);
}

与此同时,我在 MainActivity 类中创建了一个单独的 updateLesson() 方法,以便在用户选择新课程时更改每个 TextView 的文本。

public void updateLesson(int lessonNumber) {
    if(lessonNumber < 1) lessonNumber = 1;
    else if(lessonNumber > numberOfLessons) lessonNumber = numberOfLessons;
    String text = getString(R.string.lesson_number) + lessonNumber + " " + getString(R.string.of) + " " + numberOfLessons;
    textView.setText(text);

    textView1.setText(sentenceList.get((lessonNumber - 1) * 10));
    textView2.setText(sentenceList.get(1 + (lessonNumber - 1) * 10));
    textView3.setText(sentenceList.get(2 + (lessonNumber - 1) * 10));
    textView4.setText(sentenceList.get(3 + (lessonNumber - 1) * 10));
    textView5.setText(sentenceList.get(4 + (lessonNumber - 1) * 10));
    textView6.setText(sentenceList.get(5 + (lessonNumber - 1) * 10));
    textView7.setText(sentenceList.get(6 + (lessonNumber - 1) * 10));
    textView8.setText(sentenceList.get(7 + (lessonNumber - 1) * 10));
    textView9.setText(sentenceList.get(8 + (lessonNumber - 1) * 10));
    textView10.setText(sentenceList.get(9 + (lessonNumber - 1) * 10));
}

这目前还可以,但我认为当 strings.xml 中有数百或数千行时,它不会很好地扩展。另外,如果我想制作不同长度的课程,则没有灵活性。此外,我真的希望我课程中的每个句子都是自己的数组,这样我就可以让用户在简体/繁体字符、普通话/粤语发音和英语/西班牙语翻译之间进行选择。我真正需要的是一个像这样的三维数组:

<array name="course">
    <array name="lesson1">
        <!--PRIOR ITEMS OMITTED-->
        <array name="l1s6">
            <item name="l1s6simplified">你好吗?</item>
            <item name="l1s6Traditional">你好嗎?</item>
            <item name="l1s6mandarin">Nǐ hǎo ma?</item>
            <item name="l1s6cantonese">Nei5 hou2 maa1?</item>
            <item name="l1s6english">Are you well?</item>
            <item name="l1s6spanish">¿Está bien?</item>
        </array>
        <!--REMAINING ITEMS OMITTED-->
    </array>
    <!--REMAINING LESSONS OMITTED-->
</array>

当然,Android Studio 甚至不允许 2D 阵列,更不用说 3D 阵列了。有没有更好的方法来做到这一点?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)