Java getResources作为全局变量
我只是有一些活动:Java getResources作为全局变量,java,android,oop,Java,Android,Oop,我只是有一些活动: public class TestActivity extends MainActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test); final Button click = (Butt
public class TestActivity extends MainActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
final Button click = (Button) findViewById(R.id.ButtonSave);
click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Resources resources = getResources();
String text = resources.getString(R.string.test);
Toast.makeText(TestActivity.this, text, Toast.LENGTH_SHORT).show();
}
});
final Button click2 = (Button) findViewById(R.id.ButtonSave);
click2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Resources resources = getResources();
String text = resources.getString(R.string.test2);
Toast.makeText(TestActivity.this, text, Toast.LENGTH_SHORT).show();
}
});
}
}
这工作很好,但我正在学习Android,我想修改这个。我想使用getResources作为全局变量:
public class TestActivity extends MainActivity {
Resources resources = getResources(); //ADD HERE!
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
final Button click = (Button) findViewById(R.id.ButtonSave);
click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//REMOVE!
String text = resources.getString(R.string.test);
Toast.makeText(TestActivity.this, text, Toast.LENGTH_SHORT).show();
}
});
final Button click2 = (Button) findViewById(R.id.ButtonSave);
click2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//REMOVE!
String text = resources.getString(R.string.test2);
Toast.makeText(TestActivity.this, text, Toast.LENGTH_SHORT).show();
}
});
}
}
但这是一个主要的例外。为什么?如何创建它?无需将其作为全局实例,它已绑定到活动,您可以通过调用其名称直接从活动获取其实例
public class TestActivity extends MainActivity {
***Resources resources;***
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
***resources = getResources();***
final Button click = (Button) findViewById(R.id.ButtonSave);
click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = resources.getString(R.string.test);
Toast.makeText(TestActivity.this, text, Toast.LENGTH_SHORT).show();
}
});
final Button click2 = (Button) findViewById(R.id.ButtonSave);
click2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = resources.getString(R.string.test2);
Toast.makeText(TestActivity.this, text, Toast.LENGTH_SHORT).show();
}
});
}
}
示例:
click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = TestActivity.this.getResources().getString(R.string.test);
Toast.makeText(TestActivity.this, text, Toast.LENGTH_SHORT).show();
}
});
无需将其分配给变量,因为getResource
将返回它的相同实例。因此,将其声明为全局变量是不必要的
第二段代码失败,因为您在活动的
onCreate()
之前直接获取getResources()
,从而捕获异常。无需使用TestActivity。此
改为使用getActivity()
也getResource()。getString()
将替换为getString()
谢谢,但是如果我想将“TestActivity.this.getResources()”缩短为“res”?我怎样才能做到呢?:)@darlik我不建议您使用它的全局实例。这的确是一个糟糕的设计,但如果您真的想要它,那么就设置它的全局实例(
Resources res;
),但在您的onCreate()
->res=getResources()
中初始化它。不幸的是,这并不能回答用户的问题。@r2DoesInc为什么会这样??我只是告诉他这是一种糟糕的做法。getResources()
没有全局范围,因为它需要上下文。同样,这并不能回答老年退休金计划的问题。这是解决他糟糕代码的好办法,但根本不是解决他提出的问题的办法。
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = getString(R.string.test);
Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT).show();
}
});