【发布时间】:2017-04-24 16:47:48
【问题描述】:
我是一个真正的 Java 新手,尤其是这个面向对象的编程,所以我将不胜感激任何输入。
我已经制作了功能,可以更改每个评分栏选择的颜色,并且由于我想在其他评分栏上重复使用此功能,因此我尝试将整个代码插入方法中每个对象的名称和资源 id 作为参数,但我显然不知道我在做什么,因为我收到错误,因为名称变量已在范围中定义并且 findViewById 是非静态方法并从静态上下文中调用.
//rating bar
static void starLight(String name, int resId) {
RatingBar name = (RatingBar) findViewById(resId);
name.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float
rating, boolean fromUser) {
int whole = Math.round(rating);
Drawable progress = ratingBar.getProgressDrawable();
if (whole == 1) {
DrawableCompat.setTint(progress,
ResourcesCompat.getColor(getResources(), R.color.colorGreen, null));
}
if (whole == 2) {
DrawableCompat.setTint(progress,
ResourcesCompat.getColor(getResources(), R.color.colorOrange, null));
}
if (whole == 3) {
DrawableCompat.setTint(progress,
ResourcesCompat.getColor(getResources(), R.color.colorRed, null));
}
}
});
}
如果您能给我一些启发或指出正确的方向,我将不胜感激。
【问题讨论】:
-
你有一个
String name并试图声明一个RatingBar name- 那么name应该指哪个? -
@UnholySheep 纠正我,因为我可能错了。如果我的布局文件中的评分栏很少,并且想要为每个评分栏添加自定义侦听器,我是否不必为通过 findViewById 链接的每个对象创建并赋予不同的名称?并将侦听器设置为每个?所以我想如果我传递不同的名称和正确的 id 作为参数,我将能够像这样初始化它们中的每一个。
-
正如迈克尔在他的回答中指出的那样,您没有使用
String name参数,因此您可以删除它 - 但是您不能有两个具有相同名称的不同变量(在同一范围内)
标签: java android class methods