我有两个活动—一个显示来自SQLite的数据,另一个在那里添加数据。我可以用标签切换它们。问题是,如果我添加一个新项目,我不知道如何刷新列表,因为它在一个不同的活动类,我不能在我的添加类访问它。如何解决这个问题?
这是我的两个类:
列表:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_1);
final ShoppingSQL shoppingSQL = new ShoppingSQL(this);
final List<ShoppingData> list = shoppingSQL.getAll();
final ArrayAdapter<ShoppingData> adapter = new ArrayAdapter<ShoppingData>(
this, android.R.layout.simple_list_item_1, list);
setListAdapter(adapter);
this.getListView().setLongClickable(true);
this.getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) {
shoppingSQL.delete((int)list.get(position).getId());
adapter.remove(list.get(position));
adapter.notifyDataSetChanged();
return true;
}
});
}
添加:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);
}
public void ButtonOnClick(View v) {
ShoppingSQL shoppingSQL = new ShoppingSQL(this);
ShoppingData data = new ShoppingData();
data.setName("test");
shoppingSQL.add(data);
Dialog d = new Dialog(this);
d.setTitle("Added!");
d.show();
}
我也有一个小问题。在我的第一个(列表)活动中,当我在"onLongClick"中访问每个变量时,Eclipse将它们变为final——为什么会这样,可以避免吗?还有任何关于我应该看什么以及使我的代码更好或我犯的任何其他错误的评论将是非常好的。
我会保持简单。只需从添加类发送一个意图到列表类,然后你的列表将再次填充新的项目。
你想使用的是一个CursorLoader连接到你的SQLite数据库(见http://developer.android.com/reference/android/content/CursorLoader.html)。然后,你可以使用,例如,一个ListView,它的适配器与CursorLoader同步。这或多或少是使用侦听器模式自动完成的。
在添加数据的活动中,您需要通知所有侦听器数据已更改。通常,您可以通过调用notifyChange(参见http://developer.android.com/reference/android/content/ContentResolver.html#notifyChange%28android.net.Uri,%20android.database.ContentObserver,%20boolean%29)来完成此操作。
您可能还想考虑实现您自己的内容提供程序