두개의 클래스 내 사용할수 있는 전역변수와 같은 개념으로
Activity클래스와 View클래스 내부에서 같은 변수를 참조하고 싶습니다.
키워드로 검색해보니 Sigleton Pattern과 같은 것들이 검색되었는데
저는 String변수 한개만 전역으로 두고 싶기 때문에
아래와 같이 구현을 했습니다.
import android.app.Application;
class Var_glabal extends Application {
private String myState;
public String getState(){
return myState;
}
public void setState(String s){
myState = s;
}
}
그런데 직접 원하는 부분에서 사용해 보니
아래와 같이 getApplicationContext을 형변환 하는 곳에서 에러 가 뜨더군요..
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button button = (Button) findViewById(R.id.B_search);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Context ctx = getApplicationContext();
LayoutInflater inf1 = (LayoutInflater)ctx.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inf1.inflate(R.layout.w_search, null);
AlertDialog.Builder Search_D = new AlertDialog.Builder(Main.this);
final EditText B_search_w_val = (EditText)layout.findViewById(R.id.B_search_w);
Search_D.setPositiveButton("Search", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Var_glabal Setkeyword = (Var_glabal)getApplicationContext();
Setkeyword.setState(B_search_w_val.getText().toString());
}
});
Search_D.show();
}
});
Var_glabal Getkeyword = (Var_glabal)getApplicationContext();
}
getApplicationContext를 사용한게 잘못된 것이라면 어떤 방식으로 수정을 해야 되나요??
그리고 Sigleton Pattern을 사용하는게 더 합리적인가요?
한참 동안 실갱이 해서 머리가 아프네요 ㅡㅜ
정말 난관에 빠져있는중에 답변 정말 감사드립니다.
그런데 위의 소스중 아래의 부분을
Var_glabal Setkeyword = (Var_glabal)getApplicationContext();
Setkeyword.setState(B_search_w_val.getText().toString());
말씀 하신대로
((Var_glabal)getApplicationContext()).setState(B_search_w_val.getText().toString());
로 변경을 했을 경우
동일하게 ANR팝업이 발생합니다.("Search" Button을 눌렀을때의 동작이 되겠습니다.)
만일 getApplicationContext()를 사용하는게 정말 안되는 경우에 혹시 다른 방법은 있습니까??
(Menifest에도 등록했습니다.)




((Var_glabal)getApplicationContext()).setState(B_search_w_val.getText().toString());
((Var_glabal)getApplicationContext()).getState();
접근하면 됩니다.
님 처럼 접근 한다면
Var_glabal Setkeyword = (Var_glabal)getApplicationContext();
Var_glabal glabal = new Var_glabal();
glabal.setState(B_search_w_val.getText().toString());
glabal.getState();
이렇게 하는게 맞겠져.
근데 글로벌변수를 매번 glabal개체를 생성한다면 글로벌 변수라고 할 수가 없겠져.
아 그리고 Manifest에도 Var_glabal를 등록해야 합니다.