Java 从onClickListener检索值

Java 从onClickListener检索值,java,android,Java,Android,所以我得到了这个onClickListener,在它里面我声明了一个值(int)。现在我的问题是我想在onClickListener方法之外访问该int。我知道onClickListener没有返回值,但必须有一个变通方法。我尝试的是让背景随着每次点击而改变,我使用整数来跟踪当前背景的颜色 以下是我的代码片段: aa.setOnClickListener(new LinearLayout.OnClickListener(){ int aaColor = 0; pu

所以我得到了这个onClickListener,在它里面我声明了一个值(int)。现在我的问题是我想在onClickListener方法之外访问该int。我知道onClickListener没有返回值,但必须有一个变通方法。我尝试的是让背景随着每次点击而改变,我使用整数来跟踪当前背景的颜色 以下是我的代码片段:

aa.setOnClickListener(new LinearLayout.OnClickListener(){
        int aaColor = 0;
        public void onClick(View v){
            switch (aaColor){
            case 0:
                aa.setBackgroundResource(R.drawable.green);
                aaColor++;
                break;
            case 1:
                aa.setBackgroundResource(R.drawable.blue);
                aaColor++;
                break;
            case 2:
                aa.setBackgroundResource(R.drawable.yellow);
                aaColor++;
                break;
            case 3:
                aa.setBackgroundResource(R.drawable.grey);
                aaColor++;
                break;
            case 4:
                aa.setBackgroundResource(R.drawable.black);
                aaColor = 0;
                break;
            }
        }
    });

所以基本上我想把aaColor存储在这个方法之外的另一个变量中。我使用.png图片作为背景,但是如果有更好的方法来跟踪背景,请告诉我。

也许我没有抓住要点,但是是什么阻止了您在侦听器之外声明变量呢?可以将其声明为“aa”的成员变量,也可以在类中全局声明(cruder)。

我可以想出3种解决方案:

1) 您可以使
aacolor
变量
static

2) 您可以有一个
BackgroundManager.java
类,它是一个单例,您可以通过调用
getInstance()
来使用它的方法


3) 最后,如果在类定义中定义
aacolor
变量,而不是在方法中定义,则应该识别它。

我个人会使用单例类。从代码的任何部分获取它的引用,并对其属性进行更改。我认为单例是一个全局“变量”:
在此基础上,您可以找到一个制作良好的示例(在底部),只需将其复制到代码中即可。

您可以使用SharedReferences

aa.setOnClickListener(new LinearLayout.OnClickListener(){
        SharedPreferences preferences = getSharedPreferences("MyPref", Context.MODE_PRIVATE);
        Editor editor = preferences.edit();
        int aaColor = 0;
        public void onClick(View v){
            switch (aaColor){
            case 0:
                aa.setBackgroundResource(R.drawable.green);
                editor.putInt("BgColor", aaColor).commit();
                aaColor++;
                break;
            case 1:
                aa.setBackgroundResource(R.drawable.blue);
                editor.putInt("BgColor", aaColor).commit();
                aaColor++;
                break;
            case 2:
                aa.setBackgroundResource(R.drawable.yellow);
                editor.putInt("BgColor", aaColor).commit();
                aaColor++;
                break;
            case 3:
                aa.setBackgroundResource(R.drawable.grey);
                editor.putInt("BgColor", aaColor).commit();
                aaColor++;
                break;
            case 4:
                aa.setBackgroundResource(R.drawable.black);
                editor.putInt("BgColor", aaColor).commit();
                aaColor = 0;
                break;
            }
        }
    });