비 활동 클래스에서 getResources 메서드를 사용하려고합니다. 리소스 폴더에 저장된 xml 파일에 액세스 할 수 있도록 “리소스”개체에 대한 참조를 얻으려면 어떻게해야합니까?
예:
XmlPullParser xpp = getResources().getXml(R.xml.samplexml);
답변
context
객체를 전달 해야합니다. 활동 this
에서 클래스에 대한 참조가있는 경우 또는getApplicationContext()
public class MyActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
RegularClass regularClass = new RegularClass(this);
}
}
그런 다음 생성자에서 사용하거나 인스턴스 변수로 설정할 수 있습니다.
public class RegularClass(){
private Context context;
public RegularClass(Context current){
this.context = current;
}
public findResource(){
context.getResources().getXml(R.xml.samplexml);
}
}
생성자 Context
가 매개 변수로 받아들이는 곳
답변
Context
주위에 물건 을 전달하는 것은 좋은 생각이 아닙니다 . 이것은 종종 메모리 누수로 이어질 것입니다. 제 제안은 당신이 그것을하지 않는 것입니다. 앱의 비 활동 클래스에 컨텍스트를 전달할 필요없이 수많은 Android 앱을 만들었습니다. 더 나은 아이디어는 Activity
또는 에있는 동안 액세스해야하는 리소스를 얻고 Fragment
다른 클래스에서 유지하는 것입니다. 그런 다음 앱의 다른 클래스에서 해당 클래스를 사용하여 Context
객체 를 전달하지 않고도 리소스에 액세스 할 수 있습니다.
답변
객체를 생성하지 않는 한 가지 방법이 더 있습니다. 참조를 확인하십시오 . @cristian에 감사드립니다. 아래에 위의 참조에서 언급 한 단계를 추가합니다. 나를 위해 나는 그것을 위해 객체를 만들고 액세스하는 것을 좋아하지 않습니다. 그래서 getResources()
객체를 만들지 않고 에 액세스하려고했습니다 . 이 게시물을 찾았습니다. 그래서 나는 그것을 답으로 추가하려고 생각했습니다.
단계에 따라 개체를 통해 getResources()
비 활동 클래스 에 액세스 without passing a context
합니다.
Application
예를 들어 의 하위 클래스를 만듭니다public class App extends Application {
. 단계 옆에있는 코드를 참조하십시오.- 새 클래스를 가리 키도록의 태그
android:name
속성을 설정합니다 . 예 :<application>
AndroidManifest.xml
android:name=".App"
onCreate()
앱 인스턴스 의 메서드에서 컨텍스트 (예 🙂this
를라는 정적 필드에 저장app
하고이 필드를 반환하는 정적 메서드 (예 🙂 를 만듭니다getContext()
.- 이제 다음을 사용할 수 있습니다.
App.getContext()
컨텍스트를 얻고 싶을 때마다App.getContext().getResources()
리소스에서 값을 가져 오는 데 사용할 수 있습니다 .
다음과 같이 보여야합니다.
public class App extends Application{
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
}
public static Context getContext(){
return mContext;
}
}
답변
내 대답은 다음과 같습니다.
public class WigetControl {
private Resources res;
public WigetControl(Resources res)
{
this.res = res;
}
public void setButtonDisable(Button mButton)
{
mButton.setBackgroundColor(res.getColor(R.color.loginbutton_unclickable));
mButton.setEnabled(false);
}
}
호출은 다음과 같을 수 있습니다.
WigetControl control = new WigetControl(getResources());
control.setButtonDisable(btNext);
답변
이것은 사용하여 수행 할 수 있습니다
context.getResources().getXml(R.xml.samplexml);
답변
컨텍스트를 사용할 수 있습니다. 지금 시도해보십시오. 부모가 ViewGroup입니다.
Context context = parent.getContext();
답변
컨텍스트를 전달하고 모든 작업을 수행 할 필요가 없습니다.
Context context = parent.getContext();
편집 : 부모는 ViewGroup입니다.