我有一个自定义列表视图,显示从SQLite数据库中提取的内容。我还能够编辑和更新任何给定行的单个值。我已成功实施更新。
但是,在更新行时,列表视图不会显示更改。我是否应该更改活动并返回更改已实施。根据我的理解,我需要重新查询光标以同步数据更改。
我的问题是我的listview内容可以根据spinner(All,Catergory1,Catatergory2等等)的值进行更改,因此依赖于微调器值,我需要一个不同的游标重新查询,然后需要适配器上的notifyDataSetChanged()。
E.g。
假设我有一个食物数据库:
我可以在显示所有行时编辑和更新行值(未选择类别)。 但是也 当选择的类别是水果时,我可以编辑和更新行值。
因此,依赖于微调器类别值,我必须运行特定的游标重新查询。
我试图通过一系列'if语句'来调用我的原始类,以确定微调器值,然后选择要运行的正确游标,但是这需要方法是静态的,这在返回微调器时是不允许的值。
请告知。
答案 0 :(得分:0)
我有一个可以帮助你的代码,我用它来刷新城市的列表视图,具体取决于在前一个微调器上选择的状态
final stateAdapter stateadapter = new stateAdapter(this, StateList);
//customized adapter of state, it´s just an integer and a String
StateSpinner = (Spinner) findViewById(R.id.spinner1);
StateSpinner.setAdapter(stateadapter);
StateSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
State state = (State) StateSpinner.getSelectedItem();
//Custom State Class, you may use your custom food class
ArrayList<City> CitiesList = new ArrayList<City>();
try {
//your new SQLite query to populate the CitiesList
}
} catch (Exception ex) {
}
cityadapter = new cityAdapter(MyActivity.this, CitiesList);
//customized adapter for cities
CitySpinner = (Spinner) findViewById(R.id.spinner2);
CitySpinner.setAdapter(cityadapter);
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
答案 1 :(得分:0)
我找到了requery的替代方法,只需在使用给定值更改数据库后手动更新数组/适配器,然后运行notifyDataSetChanged()命令刷新listview。