我有一个活动GridView
,它显示我数据库中的数据。当用户选择Account
时,它会加载另一个活动AccountManager
,其中包含GridView
中所选项目的所有详细信息,并允许用户从那里进行管理(修改,删除等等) )。
问题:
当用户修改Account
时,所做的修改不会显示在AccountManager
中,而是仍显示来自GridView
的初始数据。我的猜测是因为从AccountManager
链接到GridView
的数据并没有直接链接到数据库,而是我使用了一个中间人,所以数据是在方式静态并与数据库分开。
问题:
有没有办法更新AccountManager
上的数据,而无需更改我的代码。如果是这样,我该如何做,如果没有,哪种方法可以让我将AccountManager
上的数据链接到我的数据库中的数据,这样任何修改都会在修改后立即反映在AccountManager
上。 / p>
我如何将数据从GridView
传递到AccountManager
grid.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
try {
SQLiteCursor cr = (SQLiteCursor) parent.getItemAtPosition(position);
String name = cr.getString(cr.getColumnIndex(DatabaseHelper.colName));
int amount = cr.getInt(cr.getColumnIndex(DatabaseHelper.colAmount));
String purpose = cr.getString(cr.getColumnIndex(DatabaseHelper.colPurpose));
String Terms = cr.getString(cr.getColumnIndex(DatabaseHelper.colTermsClass));
String Status = cr.getString(cr.getColumnIndex(DatabaseHelper.colStatClass));
String date = cr.getString(cr.getColumnIndex(DatabaseHelper.colDate));
String editdate = cr.getString(cr.getColumnIndex(DatabaseHelper.colEditDate));
Account acc = new Account(name, amount, purpose, db.GetTermsID(Terms),date,editdate,db.GetStatID(Status));
acc.SetID((int) id);
Intent myIntent = new Intent(AccountManager.this, AccountDetails.class);
myIntent.putExtra("AccountObject", acc);
startActivityForResult(myIntent, 0);
}
}
}
如何从GridView
AccountManager
检索数据
final Account Acc = (Account) getIntent().getSerializableExtra("AccountObject");
答案 0 :(得分:3)
您可以使用CursorLoader http://developer.android.com/reference/android/content/CursorLoader.html
或ContentObserver http://developer.android.com/reference/android/database/ContentObserver.html
在ContentProvider(http://developer.android.com/reference/android/content/ContentProvider.html)中更改数据时通知URI,将分别触发CursorLoader和ContentObserver的onLoadFinished或onChange