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