亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以編程方式在 RecyclerView 項目(項目中的某個元素)上設置背景顏色

以編程方式在 RecyclerView 項目(項目中的某個元素)上設置背景顏色

繁星淼淼 2023-04-26 15:59:33
我有ActivityGame一個TextView包含面數的。同樣,Activity我有一個RecyclerView并且那個RecyclerView當然包含多個項目。這些項目有不同的標準編號。例如,Par number inActivityGame是 3,現在在RecyclerViewitems 中,假設我有 1 個 par number 為 3 的項目,第二個有 2,第三個有 4。如果一個項目的標準編號與 的標準編號相同ActivityGame,那么該項目的標準編號背景應該變成灰色。如果項目的標準件數大于 中的標準件數ActivityGame,則項目的標準件數背景應變為紫色。最后,如果它小于ActivityGamepar number,則該項目的 par number 背景應該變為藍色。這是我試圖在適配器中做的事情,以使其工作:@Overridepublic void onBindViewHolder(@NonNull GameViewHolder holder, int position) {    holder.mTextPar.setText(currentItem.getText2());    /** 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()) < Integer.parseInt(ActivityGame.mHoleNm.getText().toString())) {        holder.mTextPar.setBackgroundColor(Color.parseColor("#255eba"));        notifyDataSetChanged();    }}這就是我認為可行的方法,但它沒有,當我嘗試打開ActivityGame所有這些發生的地方時,我的應用程序立即崩潰。我認為這onBindViewHolder是實現這一目標的正確位置,但我顯然采用了錯誤的方法。如果您對我應該在哪里或如何處理這個問題有更好的想法,請分享。提前致謝。
查看完整描述

2 回答

?
www說

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。


查看完整回答
反對 回復 2023-04-26
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

您的活動中不應該有靜態小部件。相反,您應該將 par 編號作為參數傳遞給適配器構造函數,這樣您就不必在活動中聲明靜態方法來獲取 par 值。

如果 par 值可能會實時更改,則向您的適配器添加一個方法以獲取新的 par 值,然后刷新適配器項目。只要面值發生變化,就會從活動中調用該方法。


查看完整回答
反對 回復 2023-04-26
  • 2 回答
  • 0 關注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號