好的,所以我试图从链接的对象列表中填充android中的列表视图。我正在从文本文件中读取行,从文本文件的每一行中分割出两个值,用“,”分隔,将每个值存储到一个链接的对象列表中。然后我拉动每个对象的名称字段以填充列表视图。我知道它很草率我只是从Android开始:E此时它根本不会运行,但代码中没有错误。
这是我的activity.java文件
package com.pkuCalc.pkuCalc;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import android.app.Activity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.os.Bundle;
public class PkuCalcActivity extends Activity {
private ListView lv;
List<Food> foodlist = new LinkedList<Food>();
int numFoodItems = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lv = (ListView) findViewById(R.id.listView1);
try{
InputStream inputStream = getResources().openRawResource(R.raw.food);
if (inputStream != null) {
InputStreamReader inputreader = new InputStreamReader(inputStream);
BufferedReader r = new BufferedReader(inputreader);
String strLine;
while (( strLine = r.readLine()) != null) {
int z = 0;
int length = strLine.length();
int ind = strLine.indexOf( ',' );
String name = "";
for (int i = 0; i < ind; i++) {
name = name + strLine.charAt(i);
}
String sphe = "";
for (int i = ind + 2; i < length; i++) {
sphe = sphe + strLine.charAt(i);
}
int phe = Integer.parseInt(sphe);
Food newFood = new Food(name, phe);
foodlist.add(newFood);
numFoodItems = z;
z++;
}
}
inputStream.close();
} catch (IOException e){ //Catch exception if any
e.printStackTrace();
}
ArrayList<String> values = new ArrayList<String>();
for (int i = 0; i <= numFoodItems; i++) {
values.add((foodlist.get(i)).getName());
}
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, values);
lv.setAdapter(arrayAdapter);
setContentView(R.layout.main);
}
}
答案 0 :(得分:0)
在调用
之后,您才能通过它的ID找到视图setContentView(R.layout.main);
将上面一行作为onCreate函数的第二行,它将起作用。
答案 1 :(得分:0)
作为一个建议,一个方便的java函数是String.split(String pattern)
。仍假设文本中的每一行始终为:string,integer。我们可以重写你的读者循环:
while (( strLine = r.readLine()) != null) {
String[] pair = strLine.split(",");
Food newFood = new Food(pair[0], Integer.parseInt(pair[1]));
foodlist.add(newFood);
}
我不太确定z
和numFoodItems
正在做什么,因为它们在每个循环上都设置为零,所以我把它们排除了。如果您想知道foodlist
中有多少食品,可随时致电foodlist.size();
你可以更多地压缩这个循环,但是在某些时候你开始失去可读性,所以这取决于你。
<强>加成强>
啊哈,这就是你要用numFoodItems
做的事情。让我们改变用于构建values
的循环:
for (Food foodItem : foodlist) {
values.add(foodItem.getName());
}
根据Oracle的说法,像这样的For-Each循环速度更快,作为奖励,它们的输入时间更短。现在,您可能会在ListView中获得多行。