java - 从硬编码字符串数组切换到 getStringArray() 时崩溃

标签 java android arrays string android-arrayadapter

我有一个简单的 ArrayAdapter,其中填充了字符串数组。

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
            inflater.getContext(), android.R.layout.simple_list_item_1,
            numbers_text);

当我传入这样的字符串时,一切正常。

String[] numbers_text = new String[] { "one", "two", "three", "four" };

但是当我以这种方式声明字符串时,它会崩溃。

Resources res = getResources();
String[] numbers_text = res.getStringArray(R.array.Planets);

这里有我遗漏的逻辑错误吗?

xml 字符串数组:

<string-array name="Planets">
    <item>Sun</item>
    <item>Mercury</item>
    <item>Venus</item>
    <item>Earth</item>
    <item>Mars</item>
    <item>Jupiter</item>
    <item>Saturn</item>
    <item>Uranus</item>
    <item>Neptune</item>
</string-array>

编辑:发布更新的代码,并将字符串声明移至函数中

public class SimpleListFragment extends ListFragment
{
Resources res = getActivity().getResources();

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    String[] numbers_digits = res.getStringArray(R.array.Planets);
    new CustomToast(getActivity(), numbers_digits[(int) id]);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    String[] numbers_text = res.getStringArray(R.array.Planets);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(
            inflater.getContext(), android.R.layout.simple_list_item_1,
            numbers_text);
    setListAdapter(adapter);
    return super.onCreateView(inflater, container, savedInstanceState);
}
}

最佳答案

要访问资源,您需要有效的上下文。将 numbers_text 的初始化移至回调中,例如 onCreateView

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {
  String[] numbers_text = getResources().getStringArray(R.array.Planets);

  ArrayAdapter<String> adapter = new ArrayAdapter<String>(
        inflater.getContext(), android.R.layout.simple_list_item_1,
        numbers_text);
  setListAdapter(adapter);
  return super.onCreateView(inflater, container, savedInstanceState);
}

关于java - 从硬编码字符串数组切换到 getStringArray() 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29963483/

相关文章:

android - Android 6 发布后 Google + plus 登录无法使用

java - Android Studio (Java) 未接收顺序正确的按钮值

Java编程构造函数理解

java - 使用日历从 DateFormat 解析日期时输出错误

android - Kotlin,具有属性的字符串模板

ruby-on-rails - 向资源添加数组列

c++ - 指向二维数组的指针在 C++ 中如何工作?

java - 删除目录时遇到问题,Java

java - 如何引用不在Jar文件内的资源?

java - 如何获取输入并保存到数组中然后打印数组输入?