Android ListView sqlite更新刷新
我当前的应用程序有一个Listview,它从sqlite数据库中提取和显示数据。数据库第一列中的数据显示在listview中,单击时,活动开始显示与第一列关联的列的其余部分。编辑数据时,DB会更新,但除非重新启动应用程序,否则listview不会显示更新。我正在尝试在onResume方法中实现startActivityForResult(),但未成功。我试图在数据库更新后刷新我的listview。我怎样才能做到这一点 ListView活动:Android ListView sqlite更新刷新,android,android-intent,android-listview,refresh,Android,Android Intent,Android Listview,Refresh,我当前的应用程序有一个Listview,它从sqlite数据库中提取和显示数据。数据库第一列中的数据显示在listview中,单击时,活动开始显示与第一列关联的列的其余部分。编辑数据时,DB会更新,但除非重新启动应用程序,否则listview不会显示更新。我正在尝试在onResume方法中实现startActivityForResult(),但未成功。我试图在数据库更新后刷新我的listview。我怎样才能做到这一点 ListView活动: @Override public void onCr
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_listview);
loginList = (ListView)
findViewById(R.id.loginlist);
loginList.setOnItemClickListener(this);
webLogin = (Button)
findViewById(R.id.button3);
webLogin.setOnClickListener(this);
loginArrayList = new ArrayList<LoginDetails>();
loginListAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, populateList());
loginList.setAdapter(loginListAdapter);
}
@Override
public void onClick (View v) {
Intent webLoginIntent = new Intent (this, LoginPlusActivity.class);
startActivity(webLoginIntent);
}
public List<String> populateList (){
List<String> webNameList = new ArrayList<String>();
dataStore openHelperClass = new dataStore (this);
SQLiteDatabase sqliteDatabase = openHelperClass.getReadableDatabase();
Cursor cursor = sqliteDatabase.query(dataStore.TABLE_NAME_INFOTABLE, null, null, null, null, null, dataStore.COLUMN_NAME_SITE, null);
startManagingCursor(cursor);
while (cursor.moveToNext()){
String sName = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_SITE));
String wUrl = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_ADDRESS));
String uName = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_USERNAME));
String pWord = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_PASSWORD));
String lNotes = cursor.getString(cursor.getColumnIndex(dataStore.COLUMN_NAME_NOTES));
LoginDetails lpDetails = new LoginDetails();
lpDetails.setsName(sName);
lpDetails.setwUrl(wUrl);
lpDetails.setuName(uName);
lpDetails.setpWord(pWord);
lpDetails.setlNotes(lNotes);
loginArrayList.add(lpDetails);
webNameList.add(sName);
}
sqliteDatabase.close();
return webNameList;
}
@Override
protected void onResume() {
super.onResume();
Intent i = new Intent(LoginList.this, UpdateDeleteLoginList.class);
LoginList.this.startActivityForResult(i, 1);
loginList.setAdapter(loginListAdapter);
loginListAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, populateList());
loginList.setAdapter(loginListAdapter);
}
@Override
public void onClick(View v){
loginSitetext = sName.getText().toString();
loginAddresstext = wUrl.getText().toString();
loginUsertext = uName.getText().toString();
loginpassWordtext = pWord.getText().toString();
loginNotestext = lNotes.getText().toString();
LoginDetails loginDetails = new LoginDetails();
loginDetails.setsName(bundledWebSite);
loginDetails.setwUrl(bundledWebAddress);
loginDetails.setuName(bundledUserName);
loginDetails.setpWord(bundledPassWord);
loginDetails.setlNotes(bundledNotes);
if(v.getId()==R.id.rucBttn){
finish();
}else if(v.getId()==R.id.ruuBttn){
updateLoginDetails(loginDetails);
Intent returnIntent = new Intent();
setResult(RESULT_CANCELED, returnIntent);
finish();
}else if(v.getId()==R.id.rudBttn){
deleteLoginDetails(loginDetails);
}
}
private void updateLoginDetails(LoginDetails loginDetails){
dataStore androidOpenDbHelper = new dataStore(this);
SQLiteDatabase sqliteDatabase = androidOpenDbHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(dataStore.COLUMN_NAME_SITE, loginSitetext);
contentValues.put(dataStore.COLUMN_NAME_ADDRESS, loginAddresstext);
contentValues.put(dataStore.COLUMN_NAME_USERNAME, loginUsertext);
contentValues.put(dataStore.COLUMN_NAME_PASSWORD, loginpassWordtext);
contentValues.put(dataStore.COLUMN_NAME_NOTES, loginNotestext);
String[] whereClauseArgument = new String[1];
whereClauseArgument[0] = loginDetails.getsName();
System.out.println("whereClauseArgument[0] is :" + whereClauseArgument[0]);
sqliteDatabase.update(dataStore.TABLE_NAME_INFOTABLE, contentValues, dataStore.COLUMN_NAME_SITE+"=?", whereClauseArgument);
sqliteDatabase.close();
finish();
您可以通过在适配器上调用notifyDataSetUpdated来刷新listview。这将强制整个listview刷新,所有刷新它的视图都将调用getView。您所问的问题有一个标准解决方案,不幸的是,它比几行代码更复杂。它由内容提供者、数据加载器和游标适配器的组合来完成 我在上面放了一个小演示,它有一个包含所有组件的框架,可以修改以完成您需要的功能。它还可以处理平板电脑(以及更新的手机)上的单窗格/双窗格布局 是一个模块,用作数据库表的接口,并将更改通知ListView,从而立即刷新列表。只需grep“getContentResolver().notifyChange()”调用,这些调用将负责刷新列表。只要您使用Content Provider对数据进行所有访问(CRUD-查询、插入、删除、更新等),您的所有操作都将立即反映在ListView中 有很多关于这个的信息。。。如果你想了解这个问题 祝你好运