我有一个带有一些项目的ListView,但在我更新数据库之后我想要"刷新" ListView。有人可以帮帮我吗?
编辑:populateListView将项目添加到ListView
public void populateListView()
{
String URL = config.getUrl_For_Query() + ",&nameq=Select&tipo=select"; // my URL
String jsonString = reading.execute_query(URL); // jsonString is formatted well
try
{
JSONObject jsonResponse = new JSONObject(jsonString);
JSONArray array = jsonResponse.getJSONArray("elenco");
for (int i=0; i<array.length(); i++) // I scan all array
{
JSONObject nameObj = (JSONObject)array.get(i);
// I retrieve all information
allNames.add(nameObj.getString("name")); // Name
allLng.add(nameObj.getString("lng")); // Another information
}
}
catch (Exception e)
{ e.printStackTrace(); }
List<String> Array = new ArrayList<String>();
for(int i=0;i<allNames.size();i++) // I add all values
{
String value = allNames.get(i).toString() + ", \n\t" + allLng.get(i).toString();
Array.add(value); // here I populate my Array
}
final ListView listView = (ListView) getActivity().findViewById(R.id.List);
listView.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, Array));
//
// Click
//
}
的SaveChanges
public void saveChanges()
{
// I update a Database
// And then I'd like to refresh ListView's items
populateListView(); // Update ListView
}
答案 0 :(得分:0)
使用Comparator
。在那里,您可以定义要比较的内容以及如何在compare()
方法中定义从两个实例返回的内容。以下是String
Comparator
的示例。
Comparator myComparator = new Comparator<String>() {
public int compare(final String user1, final String user2) {
// This would return the ASCII representation of the first character of each string
return (int) user2.charAt(0) - (int) user1.charAt(0);
};
};
adapter.sort(myComparator);
这样,当您添加项目时,您不必重新创建整个Adapter
,但它将被排序。但是不要忘记在你的适配器上调用.notifyDataSetChanged()
,这将使(除其他事项之外)刷新你的布局。
答案 1 :(得分:0)
尝试使用ArrayAdapter.insert方法在特定索引中插入对象。
答案 2 :(得分:0)
首先来看看有关Android中SQlite数据库的this教程。
所以,你的问题是在列表的末尾添加了新项目。咦?这是因为您没有通知数组更改Adapter
ArrayAdapter<String> Adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, Array);
您的第一个解决方案是在更新数据库之前清除Adapter。 ......喜欢:
Adapter.clear();
可以做到这一点。这样,在更新数据库并插入新项目之前,适配器为空。您可以使用Adapter.notifyDataSetChanched();
为适配器提供有关更改的信息
在上面的教程中有一个自定义适配器。它使用此代码:
List<String> Array = new ArrayList<String>();
Array = (ArrayList<String>) db.getAllContacts();
Adapter = new MyCustomAdapter(getActivity() [in fragment case or getApplicationContext() in Activity case], R.layout.simple_list_item_1, Array);
这样就不需要清除适配器,因为它会自动执行此操作。无论您使用此方法,都会使用更新的适配器来显示列表。