[英]How to force an update of the main activity from 'outside' in android?
該問題是對該問題的進一步解答,提供了更多更好的細節。
基本上,我有一個android main活動,顯示了一些從數據庫中獲取的數據(通過SQLiteDatabase
)。 現在,我有一個PreferenceActivity
,當用戶想要更改某些首選項或刪除數據庫的內容時顯示。 在后一種情況下,數據庫的內容將被刪除-但是如何使主要活動得以更新? 如果在按下按鈕以刪除數據庫內容之后查看主活動,則希望顯示主活動零條目!
這是主要活動的相關部分:
public class MainActivity extends AppCompatActivity {
SharedPreferences.OnSharedPreferenceChangeListener mPrefListener;
private SharedPreferences settings;
public interface MyCallBack
{
public void refreshMainActivity();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(this, AlarmService.class);
startService(intent);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mCallback = new MyCallBack() {
@Override
public void refreshMainActivity() {
Toast.makeText(MainActivity.this, "TOAST MAINACTIVITY", Toast.LENGTH_LONG).show();
MainActivity.this.recreate();
}
};
/*
settings = PreferenceManager.getDefaultSharedPreferences(this);
mPrefListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Log.d("TEST", "testtest");
Toast.makeText(MainActivity.this, "TOAST MAINACTIVITY", Toast.LENGTH_LONG).show();
finish();
startActivity(getIntent());
}
};
*/
// Register the listener on the SharedPreferences
settings.registerOnSharedPreferenceChangeListener(mPrefListener);
這是UserSettingActivity.java
的內容:
public class UserSettingActivity extends PreferenceActivity {
private Preference myPreference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
myPreference = findPreference("reset");
myPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference arg0) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(UserSettingActivity.this);
alertDialog.setMessage("Are you sure to delete the database?");
alertDialog.setCancelable(true);
alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
final DBAdapter db = new DBAdapter(UserSettingActivity.this);
db.open();
db.resetDatabase();
callBack = MainActivity.mCallback;
callBack.refreshMainActivity();
} });
alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
} });
alertDialog.show();
return false;
}
});
}
}
最后是描述xml/preferences.xml
設置布局的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference android:title="Your Name"
android:key="username"
android:summary="Please provide your username"></EditTextPreference>
<CheckBoxPreference android:title="Application Updates"
android:defaultValue="false"
android:summary="This option if selected will allow the application to check for latest versions."
android:key="applicationUpdates" />
<Preference
android:key="reset"
android:title="Reset database"
android:summary="This will remove every entry in the database"
/>
</PreferenceScreen>
當我單擊“設置”屏幕上的“ reset
”按鈕並確認此選擇時,數據庫將被刪除resetDatabase
對數據庫中的兩個表執行DROP
和CREATE TABLE
的操作。 但是, Toast
“ TOAST MAINACTIVITY”永遠不會顯示在顯示屏上!
我想在這里做些什么使它按預期工作嗎? 如何通過UserSettingActivity
在我的主要活動中觸發方法/函數/內容?
該解決方案使用回調可能會有些棘手,但是我希望這會根據您的情況為您服務。
首先像這樣在您的MainActivity.java中創建接口
public interface MyCallBack
{
public void refreshMainActivity();
}
然后像這樣在您的主要活動中實現此接口
public class MainActivity extends AppCompatActivity {
public static MyCallBack mCallback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCallback = new MyCallBack() {
@Override
public void refreshMainActivity() {
MainActivity.this.recreate();
"OR"
finish();
startActivity(getIntent());
}
};
}
現在,在userSettingActivity.java中使用此接口,並在要更新MainActivity.java時調用其方法。
public class UserSettingActivity extends AppCompatActivity{
MainActivity.MyCallBack callBack;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settingsactivity);
callBack = MainActivity.mCallback;
//this is sample code ..call this function when you want to update mainactivity
callBack.refreshMainActivity();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.