我是一个真正的新手在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
@UnholySheep纠正我因为我可能是错的。如果我的布局文件中有很少的评级栏,并且希望将自定义的监听器添加到它们中的每一个,那么我是否不必为每个通过findViewById链接的对象创建不同的名称?并将听众设置为每个人?所以我想如果我通过不同的名称和正确的id作为参数,我将能够初始化它们中的每一个。 – aya9
正如Michael在他的回答中指出的,您没有使用'String name'参数,因此您可以将其删除 - 但是您不能有两个具有相同名称的变量(在相同范围内) – UnholySheep