gpt4 book ai didi

java - 如何在android中从 'outside'强制更新主要 Activity ?

转载 作者:行者123 更新时间:2023-12-01 21:56:56 24 4
gpt4 key购买 nike

这个问题是 this 的后续问题。未回答的问题有更多更好的细节。

基本上,我有一个 android 主 Activity ,显示从数据库获取的一些数据(通过 SQLiteDatabase)。现在我有一个 PreferenceActivity 当用户想要更改某些首选项或删除数据库内容时显示。在后一种情况下,数据库的内容被删除 - 但如何更新主要 Activity ?如果我在按下删除数据库内容的按钮后查看主要 Activity ,我希望显示主要 Activity 零条目!

以下是主要 Activity 的相关部分:

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 触发主 Activity 中的方法/函数/某些内容?

最佳答案

使用回调的解决方案可能有点棘手,但我希望这能根据您的条件为您工作。

首先在 MainActivity.java 中创建接口(interface),如下所示

public interface MyCallBack
{
public void refreshMainActivity();
}

然后在您的主要 Activity 中实现此接口(interface),如下所示

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 中使用这个接口(interface),当你想更新你的 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();
}

}

关于java - 如何在android中从 'outside'强制更新主要 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34140358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com