DJ。Aduvanchik:
私はどちらかを選択する独占的または環境設定の活性に優先して無線LANを使用してユーザーを表すためにいくつかの変数を設定します。私はその後、設定onSharedPreferenceChanged
、ユーザーの選択に基づいて変数を変更します。
このアプリは、インターネットからのダウンロードデータに必要がありますが、私は、ユーザーが使用するネットワークのタイプのようないくつかのオプションを選択できるようにしたいです。私はどのように活動機能のロジックを追跡しようとしていたと私はこの問題は、変数がに変化していることだと思うonSharedPreferenceChanged
が、私は戻ってくるまでに更新されませんが、私は続行する方法がわからないと思います。私は私が活動をリフレッシュできることを見出したIntent
クラスが、私はいわばコーナーに自分自身をコード化されてきたので、それは関数内で静的である必要がありますが、それは静的だ場合、それは仕事をしません。
public class SettingsActivity extends AppCompatActivity {
static final String TAG = "SettingsActivity";
public static final String WIFI = "WiFi";
public static final String FIRST = "First";
public static final String SHARED_PREFS = "sharedPrefs";
public static final String WIFI_CONNECTION = "WiFi";
public static final String CELLULAR_CONNECTION = "Cellular";
public static final String WIFI_PREFERENCE = "WiFi Enabled";
public static final String NO_PREFERENCE = "First Enabled";
public static final String NO_CONNECTION = "No Connection";
public static final String PREF_NETWORK_TYPE = "network_choice";
public static String sPref = null;
private NetworkCheck networkCheck = new NetworkCheck();
SharedPreferences sharedPrefs;
private static boolean prefWifi;
private static boolean noPreferredNetwork;
private static boolean wifiConnected = false;
private static boolean cellularConnected = false;
public static boolean networkConnected;
public static boolean refreshActivity = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_activity);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings, new SettingsFragment())
.commit();
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
PreferenceManager.setDefaultValues(this, R.xml.root_preferences, false);
IntentFilter filter = new IntentFilter(CONNECTIVITY_SERVICE);
networkCheck = new NetworkCheck();
this.registerReceiver(networkCheck, filter);
}
@Override
public void onDestroy() {
super.onDestroy();
if (networkCheck != null) {
this.unregisterReceiver(networkCheck);
}
}
@Override
public void onStart() {
super.onStart();
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
sPref = sharedPrefs.getString(PREF_NETWORK_TYPE, "First");
if(sPref == null){
sPref = FIRST;
}
switch (sPref) {
case WIFI:
prefWifi = true;
noPreferredNetwork = false;
break;
case FIRST:
prefWifi = false;
noPreferredNetwork = true;
break;
default:
prefWifi = false;
noPreferredNetwork = true;
}
Log.i(TAG, "onSharedPreferenceChanged: onStart - " + sPref + " " + prefWifi + " " + noPreferredNetwork);
Toast.makeText(this, prefWifi + " " + noPreferredNetwork, Toast.LENGTH_LONG).show();
//checkNetworkFlags(this);
}
@Override
protected void onPause() {
super.onPause();
networkType();
Log.i(TAG, "onSharedPreferenceChanged: onPause- " + sPref + " " + prefWifi + " " + noPreferredNetwork);
}
public void networkType() {
sharedPrefs = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPrefs.edit();
editor.putBoolean(WIFI_PREFERENCE, prefWifi);
editor.putBoolean(NO_PREFERENCE, noPreferredNetwork);
editor.putBoolean(NO_CONNECTION, networkConnected);
editor.apply();
}
public static class SettingsFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
}
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(PREF_NETWORK_TYPE)) {
prefWifi = sPref.equals(WIFI);
noPreferredNetwork = sPref.equals(FIRST);
if (prefWifi) {
sPref = WIFI;
refreshActivity = true;
} else if (noPreferredNetwork) {
sPref = FIRST;
refreshActivity = true;
}
}
Log.i(TAG, "onSharedPreferenceChanged: inTheFragment- " + sPref + " " + prefWifi + " " + noPreferredNetwork);
}
}
private void refreshActivity(){
finish();
startActivity(getIntent());
}
}
変数はsPref
、prefWifi
とnoPreferredNetwork
私は戻って活動に来るまでは更新しないと私は確信しているコードで書かれているように私のロジックで行くことはありませんよ。私は何をしないのですか?refreshActivity
下部には、実装が、私はそれで行くにはどこだろうと思ったけど、私はただ、現時点では方法を考えることはできませんされていません。
イエスはあなたを愛しています。
あなただけの断片から変数を更新し、変数の値に応じて活動してビューを更新しなかったからです。だから、あなたはあなたの中の好みの変化をリッスンする必要があるアクティビティのビューを更新し、。
あなたにこのような何かを追加し活動:
SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
// update your variables here
// update your view according to the variables here.
}
};
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
sharedPrefs.registerOnSharedPreferenceChangeListener(listener);