Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Вы можете использовать класс 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. В большинстве случаев, статические синглеты могут обеспечивать такую ​​же функциональность в более модульной путь. Если ваш singleton нуждается в глобальном контексте (например, для регистрации широковещательные приемники), функция для ее получения может быть предоставлена Контекст, который внутренне использует Context.getApplicationContext(), когда сначала построим синглтон.

Ответ 2

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

public class ClassB extends Activity
{

 ClassA A1 = new ClassA(this); // for activity context

 ClassA A2 = new ClassA(getApplicationContext());  // for application context. 

}

Ответ 3

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

Ответ 4

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

Ответ 5

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

Контекст c;

A (контекстный контекст) { this.c = контекст }

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

Ответ 6

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

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

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