Мой публичный вар невидим для своей кузины - PullRequest
4 голосов
/ 22 декабря 2011

Вдохновленный книгой Magenta "Learning Android", я создал класс Application для своего приложения:

public class KITAppClass extends Application implements
        OnSharedPreferenceChangeListener {

      private static final String TAG = KITAppClass.class.getSimpleName();
      //private SharedPreferences KITPrefs;
          public SharedPreferences KITPrefs;        
. . .

Однако теперь я получаю сообщение "KITPrefs не может быть разрешено" в этой строке вдругой файл класса, который ссылается на SharedPreferences:

allContacts.setSelected(KITPrefs.getBoolean("allContacts", false));

Мне интересно: если prefs являются общими, почему они были помечены как «private» в примере кода?Почему он до сих пор не виден, даже после того, как я пометил его как «публичный»?

Если я добавлю «import KITAppClass;»Я фактически получаю удовольствие от "Не удается разрешить импорт KITAppClass"

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

Попробуйте ...

public class KITAppClass extends Application implements
    OnSharedPreferenceChangeListener {
    ...
    protected static SharedPreferences kitPrefs;
    ...
}

Затем получите доступ к kitPrefs из Activity (или других) классов в приложении (при условии, что они занимают одно и то же пространство имен), используя, например, ...

KITAppClass.kitPrefs.getBoolean(...);

Говоря, что поддержание экземпляра SharedPreferences на уровне класса Application необязательно, так как вы можете получить SharedPreferences из любого Activity в любое время.См. Использование общих настроек .

Кроме того, дважды подумайте о фактическом расширении Application, если только вам это не нужно, и если вы действительно не знаете, что делаете с ним.В большинстве случаев (по крайней мере, для простых приложений) это не нужно.То, что они показывают вам, как это сделать в книге, не означает, что вам нужно это делать.

1 голос
/ 22 декабря 2011

Чтобы получить доступ к KITPrefs из другого Activity класса, вы можете использовать getApplicationContext() и разыграть свой Application класс.

((KITAppClass)getApplicationContext()).KITPrefs.getBoolean("allContacts", false);
...