如何在arraylist中调用strings.xml中的字符串

时间:2015-07-08 06:03:29

标签: java android xml string arraylist

我正在使用ArrayList并且所有字符串都在适配器中进行了硬编码,但现在我需要为我的应用程序提供多语言支持。我认为最好的方法是将我的所有硬编码字符串移动到strings.xml文件中,然后生成我需要的所有不同语言的字符串文件。

我已经将硬编码字符串移动到我的strings.xml但我现在不确定如何在Arraylist中调用它们而不是在那里使用硬编码字符串。

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {

List<AdapterData> mItems;

public Adapter() {
super();
mItems = new ArrayList<>();
AdapterData data = new AdapterData();
data.setQuestion("How Old Are You?");
data.setAnswer("I Am 21 Years Old");
mItems.add(data);

data = new AdapterData();
data.setQuestion("Where Were You Born?");
data.setAnswer("I Was Born In The USA");
mItems.add(data);

data = new AdapterData();
data.setQuestion("Are You Male or Female?");
data.setAnswer("I Am Male");
mItems.add(data);



}

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
        .inflate(R.layout.recycler_view_card_item, viewGroup, false);
return new ViewHolder(v);
}

@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
AdapterData data = mItems.get(i);
viewHolder.mName.setText(data.getQuestion());
viewHolder.mNameTwo.setText(data.getAnswer());
 }


@Override
public int getItemCount() {

return mItems.size();
}

class ViewHolder extends RecyclerView.ViewHolder{

public TextView mQuestion;
public TextView mAnswer;


public ViewHolder(View itemView) {
    super(itemView);
    mQuestion = (TextView)itemView.findViewById(R.id.layoutQuestion);
    mAnswer = (TextView)itemView.findViewById(R.id.layoutAnswer);

}
}

}

6 个答案:

答案 0 :(得分:6)

只是提供替代方案,您也可以使用字符串数组

<string name="how_old_are_you">How old are you?</string>
<string name="are_you_male_or_female">Are you male or female?</string>
...

<string name="i_am_21">I am 21 years old</string>
<string name="i_was_born_in_the_usa">I was born in the USA</string>
...

<string-array name="questions">
  <item>@string/how_old_are_you</item>
  <item>@string/are_you_male_or_female</item>
  ...
</string-array>

<string-array name="answers">
  <item>@string/i_am_21</item>
  <item>@string/i_was_born_in_the_usa</item>
  ...
</string-array>

使用字符串数组作为列表

List<String> questions = Arrays.asList(getResources().getStringArray(R.array.questions));

它可能会派上用场。

答案 1 :(得分:4)

如果你需要一个字符串数组,我认为字符串数组是最好的选择。 创建一个名为arrays.xml的.xml文件,并将其放在代码下面:

<?xml version="1.0" encoding="utf-8"?>
<resources>

     <string-array name="array_name">
        <item>String 1</item>
        <item>String 2</item>
        <item>String 3</item>
        <item>String 4</item>
        <item>String 5</item>
    </string-array>

</resources>

然后获取你的字符串数组:

String[] myStrings = getResources().getStringArray(R.array.array_name); 

答案 2 :(得分:2)

你可以做的是

在string.xml中写下以下行

 <string name="How_Old_Are_You">How Old Are You?</string>

并在你的arraylist

 data.setQuestion(""+getResources().getString(R.string.How_Old_Are_You));

供参考,请看下面的链接

how to read value from string.xml in android?

另一种可能的解决方案是,如果你在string.xml中创建更容易的字符串数组

 string-array name="tabs_names"> 
    <item>My Tab 1</item> 
    <item>My Tab 2</item>
 </string-array> 

并在你的活动中写下以下行来访问数组。

 String[] tab_names = getResources().getStringArray(R.array.tab_names);
 String tabname1=tab_names[0];//"My Tab 1"

答案 3 :(得分:1)

您可以使用

获取这些字符串
String stringOne= getResources().getString(R.string.stringOne);

因此,使用ArrayList,您可以执行以下操作:

yourArrayList.add(stringOne)

要一次性获取它们,您需要以某种模式在xml文件中命名这些字符串。

string_0
string_1
string_2
.
.

这样你的strings.xml文件看起来像

<resources>
    <string name="string_0">First String</string>
    <string name="string_1">Second String</string>
    <string name="string_2">Third String</string>
</resources>

然后你可以使用

for (int i = 0; i < numberOfStringsInStringsXML; i++){
int id = getResources().getIdentifier("string_"+i, string, getPackage());
String string= getResources().getString(id);
yourArrayList.add(string);
}

最后,您将把所有字符串放入 yourArrayList

然后,您可以使用ArrayList为Adapter设置数据。

答案 4 :(得分:0)

创建一个字符串数组资源:

<resources>
    <string-array name="questions">
        <item>@string/question1</item>
        <item>@string/question2</item>
        ...
    </string-array>
</resources>

制作问题的本地化版本。然后在您的活动代码中,您可以使用

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

你可以直接使用String [],或者如果你需要它作为列表使用Arrays.asList(questions);

答案 5 :(得分:0)

你可以getResources(),getString(strings.xml中的字符串)。

所以你可以这样做:

mItems.add(getResources().getString(R.string.yourString));
相关问题