我是一個真正的新手在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