ListView刷新项目

时间:2014-04-19 16:47:11

标签: android listview

我有一个带有一些项目的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
}

3 个答案:

答案 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);

这样就不需要清除适配器,因为它会自动执行此操作。无论您使用此方法,都会使用更新的适配器来显示列表。