мне нужна глобальная переменная или R.string.x в порядке? - PullRequest
0 голосов
/ 17 января 2012

абстрактный у меня в голове что-то вроде

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

, так что всякий раз, когда я изменяю x, R.string.stringnameтакже изменит

и, таким образом, я могу использовать имя R.string.string в любом месте того же проекта

, но, очевидно, это ошибка

edit: я хотел бы ввестимое имя (R.string.name или глобальное) и возраст (R.string.age или глобальное) в поле EditText в форме FormActivity

и в другом другом поле деятельности, я хотел бы иметь это:

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

Ответы [ 2 ]

1 голос
/ 17 января 2012

Это действительно похоже на плохой дизайн. Что вы делаете, что вы не знаете тип x, и это то, что вам нужно сохранить в приложении?

Все, что возвращается функцией findViewById (), является объектом View или одним из его подклассов. Итак, сразу вы знаете, что у вас есть объект просмотра. Другое дело, что findViewById не принимает String в качестве параметра, он принимает только значение int, так что R.id.myVar на самом деле является целым числом, соответствующим View в раздутой иерархии.

Если вам абсолютно необходимо сделать что-то подобное, почему бы вам просто не использовать общее значение идентификатора, чтобы вы всегда искали один и тот же идентификатор и присваивали его общему объекту View, который можно сравнить с использованием instanceof позже? ? Как это:

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;

В этом случае ваш идентификатор может быть константой, которую нельзя изменить, и вы всегда сможете выяснить, с каким подклассом View вы имеете дело. На мой взгляд, это более приемлемый дизайн, чем глобальные переменные, плавающие вокруг.

0 голосов
/ 17 января 2012

R.string.<anything> - это идентификаторы строк, определенных в вашем файле string.xml. Линия

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

потерпит неудачу, потому что параметр findViewById является идентификатором, который вы можете найти в R.id.<anthing>.

Если вы говорите, что хотите определить имя и возраст в файле string.xml, то у вас есть доступ к любому Activity или View в вашем коде.

Я подозреваю, что вы действительно хотите иметь переменную имени и возраста, которая может быть установлена ​​и доступна из нескольких представлений. Чтобы передать данные от одного Activity к другому Activity, вы можете поместить их в дополнительные функции в Intent.

Например, в Activity1.java, где вы запускаете Activity2.java, вы можете сделать что-то вроде:

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 вы можете получить дополнения, которые вы положили в Намерение, что-то вроде:

Bundle extras = getIntent().getExtras();
name = extras.getString("Name");
age = extras.getInt("Age");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...