AndroidRestart Activity 来自 PreferenceFragment

AndroidRestart Activity from PreferenceFragment

我在这样的 SettingsActivity 中声明了我的 PreferenceFragment

public class ChordsSettings extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getFragmentManager().beginTransaction()
            .replace(android.R.id.content, new MyPreferenceFragment())
            .commit();
}

public static class MyPreferenceFragment extends PreferenceFragment {
    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings_preferences);
    }
}
}

我是这样做的,没有在 MainActivity 之上创建片段,因为我需要能够使用后退按钮从 SettingsActivity 转到 MainActivity 而这似乎是实现这一目标的唯一途径。

我需要在首选项更改后重新启动 MainActivity

我尝试从 preferenceFragment 发送 Broadcast,但无法从静态上下文使用 sendBroadcast()。我还有其他方法可以实现吗?

您的 MainActivity 应该看起来像这样。请注意,当单击 btnGoToSetting 时,会调用 finish() 方法。这是为了关闭当前 Activity.

MainActivity.java

public class MainActivity extends Activity {

    Button btnGoToSetting;

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

        btnGoToSetting = (Button)findViewById(R.id.btnGoToSetting);
        btnGoToSetting.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
                Intent intent = new Intent(MainActivity.this, SettingsActivity.class);
                startActivity(intent);
            }
        });
    }

}

SettingsActivity.java

public class SettingsActivity extends Activity {

    Button btnSavePreferences;

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

        btnSavePreferences = (Button)findViewById(R.id.btnSavePreferences);
        btnSavePreferences.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Here is where you save all your preferences
                yourSaveFunction();
                finish();
                Intent intent = new Intent(SettingsActivity.this, MainActivity.class);
                startActivity(intent);
            }
        });
    }

    @Override
    public void onBackPressed() {
        finish();
        Intent intent = new Intent(SettingsActivity.this, MainActivity.class);
        startActivity(intent);
    }

}

注意:还有另一种方法可以在 MainActivity 中刷新数据,方法是使数据异步,这样每次数据更改时都会自动刷新。