我对android编程很新,并且已经遇到了一个问题一周了。有许多类似的线程已经完成了我想要做的事情,但它们并不完全是我想要的。或者至少我无法理解他们所说的话。
我有一个杂货清单,每行一个。格式为:
true grocery name
true Another Grocery
false third grocery
我正在我的主要活动中阅读此文件,并使用固定的页眉和页脚以及另一个XML中的可滚动动态中间层构建其XML,其中listview
内部带有checkbox
。我已经构建了(实际上,Google' d)适配器来读取字符串数组中的文件,然后将第一个单词(true / false)应用于checkbox
,其余部分应用于复选框文字。不幸的是,这只适用于列表中的第一项。
当我有一个标题并且我的主要类正在扩展ListActivity时,这最初工作。但由于我想要更多按钮,我将其更改为Action Bar,从那时起我无法使用SetListAdapter
,而是被迫使用SetAdapter
。有人能告诉我为什么它只对第一行起作用而不是全部。
我预感到SetAdapter而不是SetListAdapter可能会搞砸它。但我不确定。如果您还需要查看我的XML结构,请告诉我。
我的代码如下:
File sdcard = Environment.getExternalStorageDirectory();
File groceryList = new File(sdcard, "grocery.txt" );
// Method to read Data from file
private void readFile() {
StringBuilder text = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(groceryList));
String line;
ArrayList<String> item = new ArrayList<String>();
while ((line = br.readLine()) != null) {
item.add(line);
}
String[] values = item.toArray(new String[item.size()]);
br.close();
ListView list = (ListView)findViewById(R.id.container);
list.setAdapter(new GroceryListAdapter(this,values));
//list.setAdapter(new ArrayAdapter<String>(this, R.layout.checkbox,
R.id.label, values));
}
catch (IOException e) {
ToastMsg("Read Failed!! " + e.getMessage());
}
}
这是我的适配器:
package in.hardikar.apps.grocerylist;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.Toast;
public class GroceryListAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
public GroceryListAdapter(Context context, String[] values) {
super(context, R.layout.checkbox, values);
this.context = context;
//Confirmed that the entire file is loading in String[] Values
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.checkbox, parent, false);
// Inflate the content into the container
//TextView textView = (TextView) rowView.findViewById(R.id.label);
//ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);
CheckBox checkBox = (CheckBox) rowView.findViewById(R.id.label);
Toast.makeText(context, values[position] + " Loaded", Toast.LENGTH_SHORT).show();
//textView.setText(values[position]);
String line = values[position];
String data[] = line.split(" ",2);
checkBox.setText(data[1]);
if(data[0].equalsIgnoreCase("true")) {
checkBox.setChecked(true);
}
else {
checkBox.setChecked(false);
}
//inflater.inflate(R.layout.checkbox, list);
return rowView;
}
}
答案 0 :(得分:1)
找到答案here
您无法在滚动视图中找到列表视图。 ListView可以自己处理滚动.. wohooo
current documentation说:“你永远不应该使用带有ListView的ScrollView,因为ListView负责自己的垂直滚动。最重要的是,这样做会使ListView中的所有重要优化都无法处理大型列表,因为它有效地强制ListView显示其整个项目列表,以填充ScrollView提供的无限容器。“