2012-01-17 2 views
0

내 머리 속의 추상은 다음과 같습니다.전역 변수가 필요하거나 R.string.x가 괜찮습니까?

idontknow x = (idontknow) findViewById (R.string.stringname);

은 그래서 X 사용 R.string.stringname도

을 바꿀 것 변경할 때마다 때문에 내가 같은 프로젝트

에 어디서나 R.string.stringname를 사용할 수 있지만 분명히 오류

입니다

편집 : 나는 formActivity

과 나는 것 또 다른 differentActivity에 글고 필드에 입력 내 이름 (R.string.name 또는 글로벌)과 나이 (R.string.age 또는 글로벌)을 싶습니다 가지고 싶어. 그의 :

TextView x = (TextView) findViewById(<some id>); 
x.setText("Hello "+ getString(R.string.nfoname)+ "you are"+getString(R.string.nfoname)+"years old"); 
+0

나는 당신이 무엇을 요구하고 있는지 잘 모르겠습니다. 분명히 해줄 수 있니? 또한 질문을 올바르게 형식화하고 올바른 문법/대소 문자를 사용하면 사람들이 대답하기가 더 어려워 질 수 있습니다. –

+0

잠깐 물어 본 다른 질문에 [이 답변] (http://stackoverflow.com/a/8888672/983430)을 읽어야합니다. 'R.string.x' 값의 목적을 오해하고있는 것처럼 보입니다. –

답변

1

이것은 실제로 좋지 않은 디자인처럼 보입니다. x의 유형을 알지 못해서 무엇을하고 있으며 응용 프로그램 전체에서 지속해야 할 필요가있는 사항입니까?

findViewById()에 의해 반환 된 모든 것은 View 객체이거나 그 서브 클래스 중 하나입니다. 그래서, 방망이에서 바로 당신은 뷰 객체를 가지고 있다는 것을 알고 있습니다. 또 다른 점은 findViewById가 String을 매개 변수로 받아들이지 않는다는 것입니다. 즉, R.id.myVar가 실제로 팽창 된 계층 구조의 View에 해당하는 정수인 int 값만 허용합니다.

절대적으로 이와 같은 작업을 수행해야하는 경우 공통 ID 값을 사용하면 항상 동일한 ID를 검색하고이를 instanceof를 사용하여 비교할 수있는 일반 View 객체에 할당해야하는 이유는 무엇입니까? 후에? 이처럼 :이 경우

View view = findViewById(R.id.generic_id); 
if(view instanceof TextView) {TextView actualView=(TextView)findViewById(R.id.generic_id);} 
else {ImageView actualView = (ImageView)findViewById(R.id.generic_id);} 
return actualView; 

, 귀하의 ID를 변경할 수없는 상수가 될 수 있고, 당신은 항상 당신이 상대하고보기의 서브 클래스가 무엇인지를 알아낼 수 있습니다. 내 생각에 전역 변수가 떠 다니는 것보다 유지 관리가 쉬운 디자인이라고 생각합니다.

+0

어, "if (view instanceof TextView)"는 무엇을 의미합니까? 감사합니다 -beginner :( –

+0

당신이 다루는 정확한 하위 클래스를 결정할 수 있습니다 findViewById는 View 기본 클래스에서 상속 된 것을 항상 반환하지만 instanceof는 처리중인 하위 클래스를 정확하게 결정할 수있는 방법을 제공합니다 (ImageView, TextView , LinearLayout, etc.) findViewById에서 가져온 객체를 해당 View 유형의 클래스 시그니처와 비교합니다. –

0

R.string.<anything>은 string.xml 파일에 정의 된 문자열의 ID입니다. findViewById에 매개 변수는 R.id.<anthing>에서 찾을 수있는 ID이기 때문에 라인

idontknow x = (idontknow) findViewById(R.string.stringname); 

이 실패합니다.

string.xml 파일에서 이름과 나이를 정의하려는 경우 코드에 Activity 또는 View에서 액세스 할 수 있습니다.

내가 실제로 원하는 것으로 의심되는 것은 여러보기에서 설정하고 액세스 할 수있는 이름 및 연령 변수를 갖는 것입니다. Activity에서 Activity으로 데이터를 전달하려면 Intent에있는 추가 데이터를 입력하면됩니다. activity2에에,

Intent i = new Intent(this, Activity2.class); 
i.putExtra("Name", name); // name is a variable with the name value you want to send 
i.putExtra("Age", age); // age is a variable with the age value you want to send 
startActivity(i); 

다음 :

예를 들어, 당신이 Activity2.java을 시작하는 곳 Activity1.java, 당신은 뭔가를 할 수 있습니다.자바, 당신은 의도에 넣은 엑스트라를 얻을 수 있습니다 :

Bundle extras = getIntent().getExtras(); 
name = extras.getString("Name"); 
age = extras.getInt("Age"); 
관련 문제