无法使用SimpleAdapter刷新ListView

时间:2016-09-10 15:45:02

标签: android listview simpleadapter

我正在尝试向listview添加一个新条目,并使用仍在listview中显示的旧条目进行刷新。以前我使用的是ArrayAdapter,我可以在使用

添加新条目后刷新
 adapter.notifyDataSetChanged();

但是我无法在SimpleAdapter上使用上面的代码。有什么建议吗? 我尝试了几种解决方案,但到目前为止还没有任何工作。

以下是我正在使用的代码,它没有添加条目:

void beta3 (String X, String Y){
    //listview in the main activity
    ListView POST = (ListView)findViewById(R.id.listView);
    //list = new ArrayList<String>();
    String data = bar.getText().toString();
    String two= data.replace("X", "");
    ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String, String>>();

    HashMap<String,String> event = new HashMap<String, String>();
    event.put(Config.TAG_one, X);
    event.put(Config.TAG_two, two);
    event.put(Config.TAG_three, Y);
    list.add(event);
    ListAdapter adapter = new SimpleAdapter(this, list, R.layout.list,
            new String[]{Config.TAG_one, Config.TAG_two, Config.TAG_three},
            new int[]{R.id.one, R.id.two, R.id.three});        
    POST.setAdapter(adapter);
}

1 个答案:

答案 0 :(得分:0)

如果您的beta3方法确实是向ListView添加条目的功能:每次调用它时,它都会设置一个带有新列表的新适配器。因此,这将始终导致ListView包含一个条目。退出beta3方法后,对列表的引用就消失了。

您必须重用list实例变量。将ArrayList<HashMap<String,String>> list放入课堂/活动范围并初始化一次(例如在onCreate()中)。

另一个问题是您使用ListAdapter变量作为SimpleAdapter实例的引用。 ListAdapter是一个不提供notifyDataSetChanged方法的界面。您应该使用SimpleAdapter变量。

以下是一个例子:

public class MyActivity {

    ArrayList<HashMap<String,String>> list;
    SimpleAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        ListView POST = (ListView)findViewById(R.id.listView);
        list = new ArrayList<HashMap<String, String>>();
        adapter = new SimpleAdapter(this, list, R.layout.list,
            new String[]{Config.TAG_one, Config.TAG_two, Config.TAG_three},
            new int[]{R.id.one, R.id.two, R.id.three});        
        POST.setAdapter(adapter);
    }


    void beta3 (String X, String Y){
        String two = ""; // adapt this to your needs
        ...
        HashMap<String,String> event = new HashMap<String, String>();
        event.put(Config.TAG_one, X);
        event.put(Config.TAG_two, two);
        event.put(Config.TAG_three, Y);
        list.add(event);
        adapter.notifyDataSetChanged();
    }

}