Les variables ne sont pas mis à jour jusqu'à ce que je retourne à l'activité dans le projet Android

DJ. Aduvanchik:

Je définirait des variables pour représenter l'utilisateur de choisir soit en utilisant exclusivement ou wifi sans préférence dans l'activité Préférences. Je me suis alors mis en place un onSharedPreferenceChangedpour changer la variable en fonction du choix de l'utilisateur.

Les besoins d'applications aux données de téléchargement de l'Internet , mais je veux que l'utilisateur de sélectionner certaines options comme quel type de réseau à utiliser. Je suis en train de suivre la logique de la façon dont la fonction d'activité et je pense que le problème est que les variables changent dans le onSharedPreferenceChanged, mais ne sont pas rafraîchies jusqu'à ce que je revienne, mais je ne suis pas sûr de la façon de procéder. Je trouve que je peux rafraîchir l'activité avec la Intentclasse , mais il doit être statique dans la fonction mais il ne fonctionne pas si elle est statique, donc je me suis codé dans un coin pour ainsi dire.

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

Les variables sPref, prefWifiet noPreferredNetworkne mettent pas à jour jusqu'à ce que je reviens à l'activité et je ne sais pas où aller avec ma logique comme il est écrit dans le code. Qu'est-ce que je rate? Le refreshActivityau fond n'est pas mis en œuvre , mais je pensais que ce serait un endroit où aller avec elle , mais je ne peux pas penser à une façon pour le moment.

Jésus vous aime;

C'est parce que vous mettez à jour uniquement les variables de fragment et ne pas mettre à jour la vue dans l' activité en fonction de la valeur des variables. , Vous avez besoin d'écouter les changements de préférence dans votre activité , puis mettez à jour votre point de vue.

Ajouter quelque chose comme ceci à votre activité :

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

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=231614&siteId=1
conseillé
Classement