从onClickListener检索值

问题描述:

所以我得到了这个onClickListener,并在里面我声明了一个值(int)。现在我的问题是,我想要在onClickListener方法之外访问该int。我知道onClickListener没有返回值,但必须有一个解决方法。什么我想是有与每个点击的背景变化,我用的是整数跟踪哪个颜色的背景是目前 这里是我的代码片段:从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变量,但在方法中定义该变量,则应该识别该变量。

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

你可以用户SharedPrefences

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