当我从其他活动返回活动时,我尝试刷新ListView
内容。当我进一步返回主应用程序屏幕并返回时,它只刷新内容。
这是我的活动,其中我设置了ListView
及其适配器:
public static final String ID = "Id";
public static final String iidd = "iidd";
private static final String DESC = "Description";
private AppCompatDelegate delegate;
Cursor c;
ListView listFood;
SimpleAdapter myAdapter;
ArrayList<Map<String, String>> names = new ArrayList<Map<String, String>>();
Integer i_d;
Integer iddd;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activityfood_main);
listFood = (ListView) findViewById(R.id.listViewF);
listFood.setOnItemClickListener(viewFoodListener);
// database read
DatabaseConnectorFood db = new DatabaseConnectorFood(this);
db.open();
c = db.getFoodData();
while(c.moveToNext()) {
Map<String, String> data = new HashMap<String, String>(2);
data.put("Description", c.getString(c.getColumnIndex("Description")));
data.put("Serving_Size", c.getString(c.getColumnIndex("Serving_Size")));
names.add(data);
}
db.close();
myAdapter = new SimpleAdapter(this, names, R.layout.list_food,
new String[] {"Description", "Serving_Size"},
new int[] {R.id.ViewFoodNotesOne, R.id.ViewFoodNotesTwo});
listFood.setAdapter(myAdapter);
}
我尝试在onResume()
下添加它,但它不起作用
@Override
protected void onResume() {
super.onResume();
myAdapter.notifyDataSetChanged();
}
编辑:我按照以下答案的建议执行了以下操作,但没有结果:
@Override
protected void onResume() {
super.onResume();
DatabaseConnectorFood db = new DatabaseConnectorFood(this);
db.open();
c = db.getFoodData();
while(c.moveToNext()) {
Map<String, String> data = new HashMap<String, String>(2);
data.put("Description", c.getString(c.getColumnIndex("Description")));
data.put("Serving_Size", c.getString(c.getColumnIndex("Serving_Size")));
names.add(data);
}
db.close();
myAdapter = new SimpleAdapter(this, names, R.layout.list_food,
new String[] {"Description", "Serving_Size"},
new int[] {R.id.ViewFoodNotesOne, R.id.ViewFoodNotesTwo});
// Set the Adapter into SimpleCursorAdapter
listFood.setAdapter(myAdapter);
myAdapter.notifyDataSetChanged();
}
已解决:将names.clear();
添加到此处的代码上方,首先将ListView
清除为@Rami建议,然后才有效!感谢
答案 0 :(得分:1)
adapter.notifyDataSetChanged()
用于告诉ListView
数据集中的项已更改。
您需要修改实际数据集才能获得任何视觉效果,因为只需调用该方法,就会在调用方法之前和之后显示相同的值。
如果您想保留此方法,则需要在onResume
中再次查询数据库以重新加载数据。 然后致电adapter.notifyDataSetChanged()
。
答案 1 :(得分:1)
onCreate没有被调用;你需要在onResume()方法
中将所有设置数据的logick放到适配器上答案 2 :(得分:1)
1)要刷新列表,您需要清除数据(names
),然后从数据库中重新加载。
2)经常调用onResume()
方法。为了获得更好的性能,我建议您在使用子活动更新数据时使用onActivityResult()
。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// refresh your list here.
}
在这种情况下,请不要忘记使用startActivityForResult()
代替startActivity()
。
答案 3 :(得分:0)
我建议使用SimpleCursorAdapter
代替SimpleAdapter
。当数据库中的数据发生变化时,它将为您处理所有细节。