【问题标题】:How to make the android main activity to 'reload' from outside?如何使 android 主要活动从外部“重新加载”?
【发布时间】:2015-12-06 16:49:04
【问题描述】:

我有一个 android 主要活动显示一些从数据库中获取的数据。现在我有一个PreferenceActivity,当用户想要更改某些偏好或删除数据库的内容时会显示它。但如果是这种情况,我如何从主要活动之外的类强制“重新加载”或主要活动的某些内容?

【问题讨论】:

  • 使用 EventBus 或广播。
  • 另一种替代方法是在onResume()onStart() 中重新加载您的用户界面,因为当您的活动回到前台时,它们将被调用。
  • 我刚刚尝试覆盖onResume(),但在没有logcat 输出的情况下出现运行时错误...

标签: android android-activity


【解决方案1】:

在您的MainActivity 中设置OnSharedPreferenceChangeListener 侦听器以自动检测首选项中的任何更改。

SharedPreferencesListener

MainActivity.java

public class MainActivity extends ... {

    private SharedPreferences settings;
    private SharedPreferences.OnSharedPreferenceChangeListener listener;
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        settings = PreferenceManager.getDefaultSharedPreferences(this);
        listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
            @Override
            public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
                // Refresh display
                refreshDisplay();
            }
        };

        // Register the listener on the SharedPreferences
        settings.registerOnSharedPreferenceChangeListener(listener);

        // Other code
    }

    public void refreshDisplay() {
        // Retrieve entries from sharedPreferences & display them, e.g
        String prefValue1 = settings.getString("key1", "default value 1");
        String prefValue2 = settings.getString("key2", "default value 2");

        // Update UI with these values
    }
}

编辑:

您的PreferenceActivity 应该是这样的:

public class SettingsActivity extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // R.xml.settings refers to the XML layout file named "settings"
        // in your res/xml directory
        addPreferencesFromResource(R.xml.settings);
    }
}

【讨论】:

  • 但是key 是什么?以及如何“重新加载”主要活动?只需输入this.onCreate()
  • key 指的是已更改的首选项。是的,把它放在 MainActivityonCreate 方法中。
  • 似乎不起作用。我在该方法中放置了一个日志输出,但是如果我打开“设置”对话框并在其中执行某些操作,则看不到日志输出。我也需要这些方法吗?打个电话什么的?
  • 别忘了在SharedPreferences 上致电setOnSharedPreferenceChangeListener()。否则,监听器将不会被使用。
  • 在什么sharedPreference?在我希望主要活动“重新加载”其内容的代码段中,是一个派生自PreferenceActivity 的类。没有sharedPreference
【解决方案2】:

如果你只是想为某项活动充电,你可以这样做:

    finish();
    startActivity(getIntent());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-12
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 2019-03-31
    • 1970-01-01
    相关资源
    最近更新 更多