【问题标题】:How to set an ArrayAdapter to a String Array using the resource id (R.string.)如何使用资源 id (R.string.) 将 ArrayAdapter 设置为字符串数组
【发布时间】:2021-01-13 23:31:11
【问题描述】:
  1. 我尝试将资源中的返回值转换为字符串,但它不起作用。

  2. 这是我的代码:

     import androidx.appcompat.app.AppCompatActivity;
     import android.os.Bundle;
     import android.widget.ArrayAdapter;
     import android.widget.ListView;
    
     public class MainActivity extends AppCompatActivity {
    
         String[] storiesTitles = {(String) getText(R.string.first_story_title), (String) getText(R.string.second_story_title), (String) getText(R.string.third_story_title)};
    
         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
    
             ArrayAdapter adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_expandable_list_item_1, storiesTitles);
    
             ListView list = findViewById(R.id.lv_stories);
             list.setAdapter(adapter);
    
         }
     }
    

【问题讨论】:

    标签: java android arrays listview


    【解决方案1】:

    你可以参考这个链接: Android documentation: string resources

    这就是您正在寻找的解决方案:

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

    “行星”数组将包含您在 strings.xml 中为其定义的所有字符串

    【讨论】:

      【解决方案2】:

      在onCreate函数内部调用字符串数组

          public class MainActivity extends AppCompatActivity {
          
          
               @Override
               protected void onCreate(Bundle savedInstanceState) {
                   super.onCreate(savedInstanceState);
                   setContentView(R.layout.activity_main);
         
       String[] storiesTitles = {(String) getText(R.string.first_story_title), (String) getText(R.string.second_story_title), (String) getText(R.string.third_story_title)};
      
                   ArrayAdapter adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_expandable_list_item_1, storiesTitles);
          
                   ListView list = findViewById(R.id.lv_stories);
                   list.setAdapter(adapter);
          
               }
           }
      

      【讨论】:

        【解决方案3】:

        你可能明白了:

        java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.myniprojects.testsave/com.myniprojects.testsave.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
        

        你必须像这样在onCreate 中初始化数组:

        public class MainActivity extends AppCompatActivity
        {
            @Override
            protected void onCreate(Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
        
                String[] storiesTitles = {(String) getText(R.string.first_story_title), (String) getText(R.string.second_story_title), (String) getText(
                        R.string.third_story_title)};
        
                ArrayAdapter adapter = new ArrayAdapter(MainActivity.this,
                                                        android.R.layout.simple_expandable_list_item_1,
                                                        storiesTitles
                );
        
                ListView list = findViewById(R.id.lv_stories);
                list.setAdapter(adapter);
            }
        }
        

        现在应该可以了。但更简单的方法是这样做:

        res/values/strings.xml 添加:

        <string-array name="titles_array">
            <item>First title</item>
            <item>Second title</item>
            <item>Third title</item>
        </string-array>
        

        还有 MainActivity:

        public class MainActivity extends AppCompatActivity
        {
            @Override
            protected void onCreate(Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
        
                String[] storiesTitles = getResources().getStringArray(R.array.titles_array);
        
                ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this,
                                                                  android.R.layout.simple_expandable_list_item_1,
                                                                  storiesTitles
                );
        
                ListView list = findViewById(R.id.lv_stories);
                list.setAdapter(adapter);
            }
        }
        

        【讨论】:

        • 不幸的是,这两种方法都不起作用,当我运行代码时,它会弹出一个窗口,显示(应用程序名称)已停止。
        • 所以问题一定出在其他地方。您必须添加 logcat 以便有人可以帮助您。 app name has stopped 什么也没说。它可以是一切
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多