2 回答

TA貢獻1775條經驗 獲得超8個贊
首先,您不必notifyDataSetChanged每次在函數中設置背景顏色時都調用onBindViewHolder。
其次,您需要在函數中實現背景顏色的所有條件onBindViewHolder。
我想建議如下實施。
@Override
public void onBindViewHolder(@NonNull GameViewHolder holder, int position) {
holder.mTextPar.setText(currentItem.getText2());
Integer parFromActivity = -1;
if(ActivityGame.mHoleNm != null)
parFromActivity = Integer.parseInt(ActivityGame.mHoleNm.getText().toString());
/** If persons par number is smaller than course par number, then change persons par number background to blue **/
if (Integer.parseInt(holder.mTextPar.getText().toString()) < parFromActivity) {
holder.mTextPar.setBackgroundColor(Color.parseColor("#255eba"));
// notifyDataSetChanged(); // We do not need this line
} else if (Integer.parseInt(holder.mTextPar.getText().toString()) > parFromActivity) {
holder.mTextPar.setBackgroundColor(Color.parseColor("#800080")); // purple maybe
} else {
holder.mTextPar.setBackgroundColor(Color.parseColor("#D3D3D3"));
}
}
希望有幫助!
編輯:
我主要假設從活動中引用的視圖是null在您從適配器中使用它時。如果是這種情況,那么您需要以其他方式將值傳遞給適配器。
由于您已經發現了問題,因此我也將其包含在我的回答中。該視圖不是唯一的Integer。因此,我想Integer.parseInt(ActivityGame.mHoleNm.getText().toString()是在扔東西ParseException。

TA貢獻1794條經驗 獲得超8個贊
您的活動中不應該有靜態小部件。相反,您應該將 par 編號作為參數傳遞給適配器構造函數,這樣您就不必在活動中聲明靜態方法來獲取 par 值。
如果 par 值可能會實時更改,則向您的適配器添加一個方法以獲取新的 par 值,然后刷新適配器項目。只要面值發生變化,就會從活動中調用該方法。
添加回答
舉報