我正在尝试根据搜索栏中的值更改列表视图中显示的值。目前列表视图正在被光标填充(我认为我不能在列表中更改一次的值)。我想在将光标添加到列表之前将光标添加到ArrayList中。
我的想法是我可以更改数组列表元素,然后更新列表视图。我遇到了创建数组列表然后更改它以更新列表视图的问题。
示例 列表视图包含2列(名称和值),这些列是返回到游标并添加到arrayList中的列。当搜索栏处于值(例如2)时,arrayList中的所有值将乘以2.它们仅在列表中更新,而不是在数据库中更新。
任何人都可以帮我推动我正确的方向来修复我的arrayList并应用搜索栏更改
Cursor和ArrayList
final Cursor ings = adapter.getIngs(Code);
ingredients.moveToFirst();
ArrayList<String> IngsList = new ArrayList<String>();
while(!ings.isAfterLast())
{
Ings.add(ings.getString(ings.getColumnIndex("name")));
Ings.add(ings.getInt(ings.getColumnIndex("measurement")));
Ings.add(ings.getString(ings.getColumnIndex("unit")));
}
ings.close();
String[] columns = new String[] {adapter.KEY_NAME, adapter.KEY_MEASUREMENT, adapter.KEY_UNIT};
int[] to = new int[] {R.id.Name, R.id.Measurement, R.id.Unit};
final SimpleCursorAdapter Adpater = new SimpleCursorAdapter(this,R.layout.row5, ingredients, ingredient_columns, to, 0);
ListView Required = (ListView) findViewById(R.id.Required);
Required.setAdapter(Adpater);
搜索栏
seekBar = (SeekBar) findViewById(R.id.servingSeek);
textView = (TextView) findViewById(R.id.actualServing);
// Initialize the textview with '0'
textView.setText("Serving Size:" + seekBar.getProgress());
seekBar.setOnSeekBarChangeListener(
new SeekBar.OnSeekBarChangeListener() {
int progress = 0;
@Override
public void onProgressChanged(SeekBar seekBar,
int progresValue, boolean fromUser) {
progress = progresValue;
textView.setText("Serving Size:" + progress);
//alter cursor values
//update cursor
}
答案 0 :(得分:0)
@JJSmith,如果你想在ArrayList中携带东西,最好你创建一个类来表示数据库中的一行,你想要这样的实例变量,
class Item{
private String name;
private float measurment;
private float unit;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getMeasurment() {
return measurment;
}
public void setMeasurment(float measurment) {
this.measurment = measurment;
}
public float getUnit() {
return unit;
}
public void setUnit(float unit) {
this.unit = unit;
}
}
当你从光标中读取数据时......你需要实现类似这样的东西
ArrayList<Item> items = new ArrayList<>();
Cursor cursor = //make a call to database
if (cursor.moveToFirst()) {
Item item;
for (int i = 0; i < cursor.getCount(); i++) {
item = new Item();
item.setName("read data from cursor and add it here");
item.setMeasurment("read data from cursor and add it here");
item.setUnit("read data from cursor and add it here");
myModels.add(item);
if (!cursor.moveToNext()) {
break;
}
}
}
更新 既然您拥有类型为
ArrayList
的{{1}},您可以将其提供给您要制作的自定义适配器,以下是如何执行此操作的示例,您可以查看Github中的代码
Item's
制作自定义ListView listView = (ListView)findViewById(R.id."listview id from the layout");
并提供您的列表,并将适配器设置为Adapter
listview
现在您感兴趣的事情,当您更改搜索栏位置时,您可以从arraylist获取项目并更改您想要的值
更改arraylist中的数据后,请在适配器上调用listView.setAdapter(adapter)
notifyDataSetChanged()
你完成了