【问题标题】:How to directly put strings from XML into a java array如何直接将 XML 中的字符串放入 java 数组
【发布时间】:2017-04-26 16:25:18
【问题描述】:

我开始了一项活动。它有一个数组,我想包含我的 strings.xml 中的字符串。此外,我有一个按钮,单击该按钮会将 TextView 的文本更改为数组中的下一个元素。所以我希望在每次单击按钮后在 TextView 中更改文本。文本来自数组。但是我无法使用代码获取数组以从 strings.xml 获取字符串:

getString(R.string.word_1)

我的 strings.xml 看起来像这样:

<resources>
<string name="app_name">Name</string>
<string name="word_1">First</string>
</resources>

这个Array所在的activity有如下代码:

public class DisplayMenuActivity extends AppCompatActivity {

Button nextButton;
TextView word;

public String list[] = {getString(R.string.word_1)};
private int listNumber = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_menu);



    //Word
    word = (TextView) findViewById(R.id.word);
    word.setText(list[0]);

    //Button
    nextButton = (Button) findViewById(R.id.nextButton);
    nextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            listNumber++;
            if (listNumber >= list.length) {
                listNumber = 0;
            }
            word.setText(list[listNumber]);
        }
    });
}}

例如,当我将 getString(R.string.word_1) 替换为“First”时它确实有效,但我想从 XML 文件中调用单词而不是对它们全部进行硬编码。所以问题在于从 XML 调用字符串,我在互联网上到处寻找解决方案,但它们都不起作用。任何人都知道我做错了什么?谢谢你看看谁在找。我很感激。

【问题讨论】:

    标签: java android arrays xml string


    【解决方案1】:

    您正在寻找string-array,您可以在onCreate 内或之后访问resources

    XML 文件保存在 res/values/strings.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="planets_array">
            <item>Mercury</item>
            <item>Venus</item>
            <item>Earth</item>
            <item>Mars</item>
        </string-array>
    </resources>
    

    此应用程序代码检索字符串数组:

    Resources res = getResources();
    String[] planets = res.getStringArray(R.array.planets_array)
    

    来源:https://developer.android.com/guide/topics/resources/string-resource.html

    【讨论】:

      【解决方案2】:

      你可以这样做:

      public class DisplayMenuActivity extends AppCompatActivity {
      
      Button nextButton;
      TextView word;
      
      public int[] list = {R.string.word_1};
      private int listNumber = 0;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_display_menu);
      
      
      
          //Word
          word = (TextView) findViewById(R.id.word);
          word.setText(list[0]);
      
          //Button
          nextButton = (Button) findViewById(R.id.nextButton);
          nextButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  listNumber++;
                  if (listNumber >= list.length) {
                      listNumber = 0;
                  }
                  word.setText(list[listNumber]);
              }
          });
      }}
      

      这是可行的,因为TextView.setText() 可以将 int 作为参数,只要它是字符串资源。

      【讨论】:

      • 非常感谢您的帮助。此代码有效,但您知道为什么我以前的代码无效吗?仍然不明白为什么 getString(R.string.word_1) 不起作用。我没有在编辑器中产生错误,但它确实使我手机上的应用程序崩溃。
      • 您的代码崩溃是因为您在类初始化时(即在实例创建时)调用了getString() 方法。当 Androdi 系统决定创建你的 Activity 时,它可能会错过一些上下文来检索资源。在 Activity 中,你不应该将代码放在字段初始化或构造函数中,这应该在 onCreate() 方法中完成。
      猜你喜欢
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      相关资源
      最近更新 更多