告诉我如何实现这个例子,在List视图中理解,在字符串中:
<string name="ml350">300</string>
<string name="ml400">400</string>
<string name="ml600">600</string>
<string name="ml800">800</string>
<string name="ml1000">1000</string>
public static final String[] descriptions = new String[] {
"300",
"400", "600",
"800","1000" };
ListView listView;
List<RowItem> rowItems;
rowItems = new ArrayList<RowItem>();
for (int i = 0; i < descriptions.length; i++) {
//RowItem item = new RowItem(images[i], titles[i], descriptions[i]);
RowItem item = new RowItem(R.drawable.ic_untitled_2, descriptions[i], descriptions[i]);
rowItems.add(item);
}
listView = (ListView) findViewById(R.id.list);
CustomListViewAdapter adapter = new CustomListViewAdapter(this,
R.layout.listview_item_row, rowItems);
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
问题是当我尝试替换时:
public static final String[] descriptions = new String[] {
R.strings.300,
R.strings.400, R.strings.600,
R.strings.800,R.strings.1000 };
我收到错误。
答案 0 :(得分:1)
你必须使用:
R.strings.ml350,
R.strings.ml400,
R.strings.ml600,
R.strings.ml800,
R.strings.ml1000
而不是:
R.strings.300,
R.strings.400,
R.strings.600,
R.strings.800,
R.strings.1000
你需要:
getResources().getString("your key");
首先:
300
的值为ml350
,因此您需要键才能访问该值。
第二:
R.string.Key返回String的id但您需要String的值,因此您必须使用getResources().getString()
方法访问
更好的方法是创建一个数组并在您的活动中调用它。
<强> //修改
所以你的代码必须像:
public static final String[] descriptions = new String[] {
getResources().getString(R.strings.ml350),
getResources().getString(R.strings.ml400),
getResources().getString(R.strings.m1600),
getResources().getString(R.strings.ml800,
getResources().getString(R.strings.m11000) };
并且您必须在初始化视图后调用此方法,因为这需要布局的上下文,因此如果您在onCreate()之前调用,则 NPE
答案 1 :(得分:1)
<string-array name="system">
<item>300</item>
<item>400</item>
<item>600</item>
<item>800</item>
<item>1000</item>
</string-array>
您可以在xml中创建一个数组,然后调用
String[] descriptions = getResources().getStringArray(R.array.your_string_array) //in example is system
答案 2 :(得分:0)
R.strings.300
返回int
类型,但您的数组需要字符串类型,这就是您收到错误的原因。