Intereting Posts
Кнопка Android Onclick Анимация изменения макета нижнего листа Что произойдет с существующими соединениями при переключении между 3g / wifi Создание пакетов RTP с камеры Android для отправки Размер изображения Android ImageView не масштабируется с исходным изображением Как добавить банку в внешние библиотеки в студии android Android MVP: что такое Interactor? База данных не удаляется при удалении приложения Android Android вокруг фонового изображения макетов, только верхние или нижние углы Мигающий экран перехода изображения между действиями Android – CursorLoader & SQLite без Content Provider Установите фон блокировки экрана в Android (например, Spotify do) Как добавить (вертикальный) разделитель в горизонтальный LinearLayout? Кто-нибудь создал профиль Formatter Java Code для Eclipse IDE, который соответствует правилам стиля кода Android? Gradle error: доступ к записи разрешен из потока сообщений только в студии android

Как получить мой контекст активности?

Я действительно не понимаю, как все это работает, поэтому, если у меня есть класс A которому нужен контекст класса B который расширяет Activity , как мне получить этот контекст?

Я ищу более эффективный способ, давая контекст как параметр конструктору класса A , поскольку для exsmple, если класс A будет иметь миллионы экземпляров, тогда мы получим миллионы избыточных указателей на Context пока мы должны быть Способный каким-то образом иметь только что-то и функцию геттера …

Solutions Collecting From Web of "Как получить мой контекст активности?"

Вы можете использовать класс Application (открытый класс в пакете android.application), то есть:

Базовый класс для тех, кто должен поддерживать глобальное состояние приложения. Вы можете предоставить свою собственную реализацию, указав ее имя в теге AndroidManifest.xml, что приведет к тому, что этот класс будет создан для вас, когда будет создан процесс для вашего приложения / пакета.

Чтобы использовать этот класс, выполните следующие действия:

 public class App extends Application { private static Context mContext; public static Context getContext() { return mContext; } public static void setContext(Context mContext) { this.mContext = mContext; } ... } 

В вашем манифесте:

 <application android:icon="..." android:label="..." android:name="com.example.yourmainpackagename.App" > class that extends Application ^^^ 

В действии B:

 public class B extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sampleactivitylayout); App.setContext(this); ... } ... } 

В классе A:

 Context c = App.getContext(); 

Примечание .

Как правило, нет необходимости в подклассе Application. В большинстве случаев статические синглтоны могут обеспечивать такую ​​же функциональность более модульным способом. Если вашему одноточечному узлу нужен глобальный контекст (например, для регистрации широковещательных приемников), функция для его получения может быть предоставлена ​​Контекст, который внутренне использует Context.getApplicationContext () при первом конструировании Singleton.

Хорошо, я приведу небольшой пример того, как делать то, что вы просите

 public class ClassB extends Activity { ClassA A1 = new ClassA(this); // for activity context ClassA A2 = new ClassA(getApplicationContext()); // for application context. } 

Лучший и простой способ получить контекст активности – это .this после имени Activity. Например: если имя вашей деятельности является SecondActivity , его контекст будет SecondActivity.this

Вы передаете контекст классу B в его конструкторе и убедитесь, что вы передаете getApplicationContext () вместо ActivityContext ()

Если вам нужен контекст A в B, вам нужно передать его в B, и вы можете сделать это, передав параметр Activity A как другие. Я не вижу большой проблемы с тем, что многие экземпляры A имеют свои собственные указатели на B, не уверен, что это будет даже большая часть накладных расходов.

Но если это проблема, существует возможность сохранить указатель на A как своего рода глобальный, доступный для класса Application , как предложил @hasanghaforian. Фактически, в зависимости от того, для чего вам нужен контекст, вы могли бы даже использовать контекст Application вместо этого.

Я бы предложил прочитать эту статью о контексте, чтобы лучше понять, какой контекст вам нужен.

Вы можете создать конструктор, используя параметр Context класса A, тогда вы можете использовать этот контекст.

Контекст c;

A (контекст контекста) {this.c = context}

Из операции B вы создаете объект класса A с помощью этого конструктора и передаете getApplicationContext ().