【问题标题】:How to get string from resources strings into a fragment如何从资源字符串中获取字符串到片段中
【发布时间】:2019-07-31 11:07:15
【问题描述】:

我尝试阅读 Stack Overflow 上的一些解决方案,发现它们要么不适用于我的场景,要么我根本不理解他们的解释(我对 Java 和 Android 非常陌生。 我在 res/values/strings.xml 下设置了我希望在类中使用的字符串:-

public class AttractionFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.word_list, container, false);

    // create an array list of details
    final ArrayList<Details> details = new ArrayList<>();

    // Details details
    details.add(new Details(getActivity().getString(R.string.fun_bigsplash_name), getString(R.string.fun_bigsplash_addr), R.string.fun_bigsplash_num, R.drawable.bigsplash));

我尝试了许多变体(它们不同的原因只是为了展示我尝试过的内容)但无法解决。 R.drawable.bigsplash 工作正常(当我为其他人使用文字字符串时)。

错误消息声明一个 int,我认为这意味着它获取的是引用而不是实际的字符串。

如何从片段中获取字符串?

谢谢。

【问题讨论】:

  • 也粘贴错误

标签: android


【解决方案1】:

你可以使用:

getResources().getString(R.string.my_string);

或者只是:

getString(R.string.my_string);

【讨论】:

  • 感谢您的回复。如果我首先单独创建 String 变量,然后将其添加到 ArrayList 中,我发现 getString 有效。为什么这样行,但是当我直接在 ArrayList 中使用 getString 是行不通的?
【解决方案2】:

在 Java 代码中读取字符串值或字符串数​​组。

  1. 在strings.xml中定义一个字符串数组,使用string-array xml元素。

    显示选择

    <string name="auto_complete_text_view_car">Input Favorite Car Name</string>
    
    <string-array name="car_array">
        <item>Audi</item>
        <item>BMW</item>
        <item>Benz</item>
        <item>Ford</item>
        <item>Toyota</item>
        <item>Tesla</item>
        <item>Honda</item>
        <item>Hyundai</item>
    </string-array>
    

  2. 在 Java 代码中读取字符串值。只有字符串名称

内部活动::

String defaultInputText = getResources().getString(R.string.auto_complete_text_view_car);

片段内部::

String defaultInputText = getActivity().getResources().getString(R.string.auto_complete_text_view_car);
  1. 在java源代码中读取字符串数组。请注意 car_array 只是 strings.xml 中定义的字符串数组名称。

内部活动::

String carArr[] = getResources().getStringArray(R.array.car_array);

片段内部::

String carArr[] = getActivity().getResources().getStringArray(R.array.car_array);

【讨论】:

    【解决方案3】:

    在代码的任何部分从资源中获取字符串的最简单方法是覆盖 Application 类并创建静态方法来获取“应用程序上下文”。

    例如,查看我的应用 AB Music 的应用程序类。

    https://github.com/amit-bhandari/AB-Music-Player/blob/master/app/src/main/java/com/music/player/bhandari/m/MyApp.java

    参考方法

    public static Context getContext(){
            return instance;
    }
    

    现在您可以通过简单的调用从代码中任意位置的资源中获取字符串。

    MyApp.getContext().getString(R.string.mystring)
    

    希望对你有帮助!

    【讨论】:

      【解决方案4】:

      试试这个

      getActivity().getResources().getString(R.string.app_name)
      

      【讨论】:

        最近更新 更多