无法使用 SimpleAdapter 刷新 ListView
Unable to refresh ListView with SimpleAdapter
我正在尝试向我的列表视图中添加一个新条目并使用仍显示在列表视图中的旧条目刷新它。以前我使用的是 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);
}
如果您的 beta3
方法确实是您将 new 条目添加到 ListView
的函数:它将使用新列表设置新适配器每次你打电话给它。因此,这将始终导致 ListView
包含一个条目。退出 beta3
方法后,对列表的引用消失了。
您必须重用 list
实例变量。将 ArrayList<HashMap<String,String>> list
放入 class/activity 范围并初始化它 一次 (例如在 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();
}
}
我正在尝试向我的列表视图中添加一个新条目并使用仍显示在列表视图中的旧条目刷新它。以前我使用的是 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);
}
如果您的 beta3
方法确实是您将 new 条目添加到 ListView
的函数:它将使用新列表设置新适配器每次你打电话给它。因此,这将始终导致 ListView
包含一个条目。退出 beta3
方法后,对列表的引用消失了。
您必须重用 list
实例变量。将 ArrayList<HashMap<String,String>> list
放入 class/activity 范围并初始化它 一次 (例如在 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();
}
}