2017-07-17 58 views
1

我宣布我PreferenceFragment一个SettingsActivity这样AndroidRestart活动从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顶部没有创建一个片段,因为我需要能够使用内退按钮从SettingsActivityMainActivity,这就像是实现这一目标的唯一方法。

一旦首选项发生变化,我需要重新启动MainActivity

我试过从preferenceFragment发送Broadcast,但sendBroadcast()不能从静态上下文中使用。有没有其他办法可以实现这一目标?

+0

您是否尝试过使用意图调用活动本身并完成之前的活动? – UmarZaii

+0

是的,但我也需要重新启动它。因为否则当我从'SettingsActivity'返回时,应用程序将关闭 – Daniele

+0

我认为你可以这样做。当您从MainActivity单击按钮时,您应该完成活动并打开设置活动。当你点击接受按钮保存参数时,你应该完成SettingsActivity并启动MainActivity。 – UmarZaii

回答

3

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

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); 
    } 

} 

注:还有一种方法通过使数据同步,这样每次到resfresh您在MainActivity数据数据更改会自动刷新。

+0

感谢您的好评。请告诉我更多关于异步数据的信息。可能也很有趣。 – Daniele

+0

@Daniele它取决于你正在使用什么类型的数据库。某些数据库提供了一种方法,可以使数据保持同步。你使用了什么类型的数据库? – UmarZaii

+0

我没有使用任何数据库,它都存储在本地。我正在使用列表 – Daniele