Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getResources作为全局变量_Java_Android_Oop - Fatal编程技术网

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();
            }
});