내 활동 컨텍스트를 얻는 방법은 무엇입니까?
이 모든 것이 실제로 어떻게 작동하는지에 대한 아이디어를 실제로 얻지 못하므로 확장 A
되는 클래스의 컨텍스트가 필요한 클래스 가 있다면 어떻게 그 컨텍스트를 얻을 수 있습니까?B
Activity
컨텍스트를 클래스 A
생성자에 매개 변수로 제공하는 것보다 더 효율적인 방법을 찾고 있습니다. 예를 들어, 클래스 A
에 수백만 개의 인스턴스가있을 경우 수백만 개의 중복 포인터가 Context
생기는 반면 어딘가에 하나만 있고 getter 함수를 가질 수 있어야합니다.
Application
class (android.application 패키지의 public 클래스)를 사용할 수 있습니다 .
글로벌 애플리케이션 상태를 유지해야하는 사용자를위한 기본 클래스입니다. 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 ()를 사용하는 Context를 제공 할 수 있습니다.
좋아, 나는 당신이 요청한 것을 수행하는 방법에 대한 작은 예를 제공 할 것입니다
public class ClassB extends Activity
{
ClassA A1 = new ClassA(this); // for activity context
ClassA A2 = new ClassA(getApplicationContext()); // for application context.
}
The best and easy way to get the activity context is putting .this
after the name of the Activity. For example: If your Activity's name is SecondActivity
, its context will be SecondActivity.this
you pass the context to class B in it's constructor, and make sure you pass getApplicationContext() instead of a activityContext()
You can create a constructor using parameter Context of class A then you can use this context.
Context c;
A(Context context){ this.c=context }
From B activity you create a object of class A using this constructor and passing getApplicationContext().
If you need the context of A in B, you need to pass it to B, and you can do that by passing the Activity A as parameter as others suggested. I do not see much the problem of having the many instances of A having their own pointers to B, not sure if that would even be that much of an overhead.
But if that is the problem, a possibility is to keep the pointer to A as a sort of global, avariable of the Application
class, as @hasanghaforian suggested. In fact, depending on what do you need the context for, you could even use the context of the Application
instead.
I'd suggest reading this article about context to better figure it out what context you need.
In Kotlin will be :
activity?.applicationContext?.let {
it//<- you context
}
참고URL : https://stackoverflow.com/questions/12320857/how-to-get-my-activity-context
'Programing' 카테고리의 다른 글
postgresql datetime에 일 수를 추가하는 방법 (0) | 2020.12.01 |
---|---|
헤더 / 조각이없는 단일 페이지 PreferenceActivity? (0) | 2020.12.01 |
C # long 유형에 해당하는 SQL Server 유형은 무엇입니까? (0) | 2020.12.01 |
악명 높은 어셈블리 바인딩 오류 (0) | 2020.11.30 |
모듈, 라이브러리 및 프레임 워크의 차이점 (0) | 2020.11.30 |