2016-07-26 16 views
0

У меня есть фрагмент, который я использую, чтобы получить некоторую информацию из базы данных и отобразить их в соответствующих текстовых изображениях, но есть проблема, потому что мой фрагмент не получает обновленные значения, он по-прежнему отображает предыдущие значения, пока я не перезапущу приложение. я пытался использовать onchangedlistener, но без успеха, кто-нибудь знает, как я могу обновить и обновить общие настройки без закрытия соответствующего фрагмента.Как получить обновленное значение общих настроек внутри фрагмента?

здесь немного кода, где проблема происходит:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.fragment_showinfo, null); 

    // i send my current user's id to the database, to get his info. 
    // the problems happens here because the context is loaded from getActivity() and is not closed so i can get the new values. 

    SharedPreferences prefs = getActivity().getSharedPreferences(
      "MyPrefs", MODE_PRIVATE); 
    getid = prefs.getString("currentid", null); 

    //AsyncTask class used to connect with db. 
    //on post execute it stores the info received from the db into the shared preferences. 

    Connection_db connection = new Connection_db(
      getActivity()); 
    connection.execute(connection_request, getid); 

    // i tried to reinitialize the shared prefs in order to get the new values (i tried to use the SP from above but still won't work). 
    SharedPreferences prefs_update = getActivity().getSharedPreferences(
      "MyPrefs", MODE_PRIVATE); 

    info_one = prefs_update.getString("info_one", "something"); 
    textView.setText(info_one); 
} 

ответ

0

Не проще всего устранить без LogCat распечатке, но я предположил бы, что проблема исходит от этой линии здесь:

SharedPreferences prefs = getActivity().getSharedPreferences 

Я не работал с андроидом примерно через месяц, но если я не ошибаюсь, он должен быть:

SharedPreferences prefs = this.getActivity().getSharedPreference 

Надеюсь, это поможет!

+0

Я не могу использовать getApplicationContext внутри фрагмента. У меня также есть класс приложения, из которого я могу получить статический контекст, но все же я не могу заставить его работать, – Homombi

+0

Правильно, позвольте мне обновить свой ответ через секунду – Ethan

+0

Я до сих пор не могу получить новые значения, он все еще показывает предыдущий каждый раз, когда я перезапускаю свое приложение – Homombi

0

Я использую PreferenceManager.getDefaultSharedPreferences (контекст), чтобы получать и обновлять предпочтительные значения. вы также можете сделать статический метод в некотором классе, как показано ниже , и получить к нему доступ, передавая контекст (услуги, активность и т. Д.) Напрямую.

public static void setSSIDOption(Context c , Boolean b) { 

    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(c); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putBoolean(IS_SSID_EXCLUDED, b); 
     editor.commit(); 

    } 

    public static Boolean getSSIDOption(Context c) { 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(c); 
     return settings.getBoolean(IS_EXCLUDED, false); 
    }