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 中刷新数据,方法是使数据异步,这样每次数据更改时都会自动刷新。
我在这样的 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 中刷新数据,方法是使数据异步,这样每次数据更改时都会自动刷新。