我需要全局变量或R.string.x是否可以?

时间:2012-01-17 02:14:38

标签: android string variables global

我脑子里的摘要就像是

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

这样每当我改变x时,R.string.stringname也会改变

因此我可以在同一个项目中的任何地方使用R.string.stringname

但显然是错误

编辑: 我想在formActivity上的EditText字段上输入我的名字(R.string.name或global)和年龄(R.string.age或全局)

在另一个不同的活动中,我希望有这个:

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

2 个答案:

答案 0 :(得分:1)

这看起来真的很糟糕。你在做什么,你不知道x的类型,这是你需要在你的应用程序中持续存在的东西?

findViewById()返回的所有内容都是View对象或其子类之一。所以,你知道你有一个视图对象。另一件事是findViewById不接受String作为参数,它只接受一个int值,这样R.id.myVar实际上是一个对应于膨胀层次结构中View的整数。

如果您必须执行类似的操作,为什么不使用公共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可能是一个无法更改的常量,您始终可以找出您正在处理的View的子类。在我看来,这感觉就像一个更易于维护的设计,而不是让全局变量浮动,

答案 1 :(得分:0)

R.string.<anything>是string.xml文件中定义的字符串ID。这条线

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

将失败,因为findViewById的参数是一个ID,您可以在R.id.<anthing>中找到。

如果您要在string.xml文件中定义名称和年龄,则可以从代码中的任何ActivityView进行访问。

我怀疑你真正想要的是拥有一个可以从多个视图设置和访问的名称和年龄变量。要将数据从一个Activity传递到另一个Activity,您可以将它们放入Intent中的附加内容。

例如,在您启动Activity2.java的Activity1.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中,您可以获得放入Intent的额外内容,例如:

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