Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Recyclerview适配器工作不正常_Java_Android_Android Recyclerview_Adapter - Fatal编程技术网

Java Recyclerview适配器工作不正常

Java Recyclerview适配器工作不正常,java,android,android-recyclerview,adapter,Java,Android,Android Recyclerview,Adapter,在我的适配器中,我检查值是否大于或等于零,我将布局颜色更改为绿色,否则保持红色。 问题是当recyclerview中有很多项的颜色停止变化,或者它们都显示为绿色(即使值小于零)。 问题的原因是什么?如何解决? 提前谢谢。 这是我的适配器: import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Resources; import android.

在我的适配器中,我检查值是否大于或等于零,我将布局颜色更改为绿色,否则保持红色。 问题是当recyclerview中有很多项的颜色停止变化,或者它们都显示为绿色(即使值小于零)。 问题的原因是什么?如何解决? 提前谢谢。 这是我的适配器:


import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;

import java.text.DecimalFormat;
import java.util.ArrayList;

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.RVViewHolder> {

    private Context mContext;

    private ArrayList<Item> itemList;

    public RVAdapter(Context context, ArrayList<Item> arrayList) {
        mContext = context;
        itemList = arrayList;

    }

    public static class RVViewHolder extends RecyclerView.ViewHolder {

        TextView valueTv, memoTv, categoryTv, dateTv;

        LinearLayout indicatorLL, infoLL;
        CardView itemLL;

        public RVViewHolder(View itemView) {
            super(itemView);

            // Calling FindViewByID()
            valueTv = itemView.findViewById(R.id.tv_value);
            memoTv = itemView.findViewById(R.id.tv_memo);
            categoryTv = itemView.findViewById(R.id.tv_category);
            dateTv = itemView.findViewById(R.id.tv_date);
            indicatorLL = itemView.findViewById(R.id.layout_indicator);
            infoLL = itemView.findViewById(R.id.layout_item_info);
            itemLL = itemView.findViewById(R.id.item_layout);

        }

    }

    @Override
    public RVViewHolder onCreateViewHolder(ViewGroup parent, int i) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.item_layout, parent, false);
        return new RVViewHolder(view);

    }

    @Override
    public void onBindViewHolder(RVViewHolder holder, int position) {
        //holder.infoLL.setAnimation(AnimationUtils.loadAnimation(mContext, R.anim.fade_transition_anim));
        //holder.indicatorLL.setAnimation(AnimationUtils.loadAnimation(mContext, R.anim.fade_transition_anim));

        Item item = itemList.get(position);
        DecimalFormat format = new DecimalFormat("#,###,###,###.##");
        Double value = item.getValue();
        holder.valueTv.setText(format.format(value));
        if (value > 0 || value == 0) {
            Resources res = mContext.getResources();
            //holder.indicatorLL.setBackground(res.getDrawable(R.drawable.item_income_indicator_bg, mContext.getTheme()));
            holder.indicatorLL.setBackgroundTintList(ColorStateList.valueOf(res.getColor(R.color.green, mContext.getTheme())));
        }
        holder.memoTv.setText(item.getMemo().toString());
        holder.categoryTv.setText(item.getCategory().toString());
        holder.dateTv.setText(item.getDate().toString());

        holder.itemLL.setAnimation(AnimationUtils.loadAnimation(mContext, R.anim.fade_transition_anim));

    }

    @Override
    public int getItemCount() {
        return itemList.size();
    }

}

导入android.content.Context;
导入android.content.res.ColorStateList;
导入android.content.res.Resources;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.view.animation.AnimationUtils;
导入android.widget.LinearLayout;
导入android.widget.TextView;
导入androidx.cardwiew.widget.cardwiew;
导入androidx.recyclerview.widget.recyclerview;
导入java.text.DecimalFormat;
导入java.util.ArrayList;
公共类RVAdapter扩展了RecyclerView.Adapter{
私有上下文;
私有arraylistitemlist;
公共RVAdapter(上下文上下文,ArrayList ArrayList){
mContext=上下文;
itemList=arrayList;
}
公共静态类RVViewHolder扩展了RecyclerView.ViewHolder{
TextView valueTv、memoTv、categoryTv、dateTv;
线性布局指示灯,信息灯;
cardwiew-itemLL;
公共视图持有者(视图项视图){
超级(项目视图);
//调用FindViewByID()
valueTv=itemView.findViewById(R.id.tv\U值);
memoTv=itemView.findviewbyd(R.id.tv\u memo);
categoryTv=itemView.findViewById(R.id.tv\U类别);
dateTv=itemView.findViewById(R.id.tv\U日期);
indicatorLL=itemView.findviewbyd(R.id.layout\u指示器);
infoLL=itemView.findviewbyd(R.id.layout\u item\u info);
itemLL=itemView.findviewbyd(R.id.item\u布局);
}
}
@凌驾
公共RVViewHolder onCreateViewHolder(视图组父级,int i){
LayoutFlater充气机=LayoutFlater.from(mContext);
视图=充气机。充气(R.layout.item\u布局,父项,false);
返回新的RVViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(RVViewHolder,内部位置){
//holder.infoLL.setAnimation(AnimationUtils.loadAnimation(mContext,R.anim.fade_transition_anim));
//holder.indicatorLL.setAnimation(AnimationUtils.loadAnimation(mContext,R.anim.fade_transition_anim));
Item=itemList.get(位置);
DecimalFormat=新的DecimalFormat(“#,#,#,#,#,#,#,#,#,#”);
Double value=item.getValue();
holder.valueTv.setText(format.format(value));
如果(值>0 | |值==0){
Resources res=mContext.getResources();
//持有者指示牌所有挫折背景(res.getDrawable(R.drawable.item_income_indicator_bg,mContext.getTheme());
holder.indicatorLL.setBackgroundTintList(ColorStateList.valueOf(res.getColor(R.color.green,mContext.getheme()));
}
holder.memoTv.setText(item.getMemo().toString());
holder.categoryTv.setText(item.getCategory().toString());
holder.dateTv.setText(item.getDate().toString());
holder.itemLL.setAnimation(AnimationUtils.loadAnimation(mContext,R.anim.fade_transition_anim));
}
@凌驾
public int getItemCount(){
返回itemList.size();
}
}

您应该添加
else语句
,因为当您滚动时视图是循环的

  if (value > 0 || value == 0) {

 holder.indicatorLL.setBackgroundTintList(ColorStateList.valueOf(res.getColor(R.color.green, mContext.getTheme())));
  } else {
   // Set default color
holder.indicatorLL.setBackgroundTintList(ColorStateList.valueOf(res.getColor(R.color.red, mContext.getTheme())));
  }

这可能是因为作为一个回收者,视图持有者被回收,而您的代码只在一个方向上改变颜色,即变为绿色

试一试


Resources res=mContext.getResources();
如果(值>0 | |值==0){
holder.indicatorLL.setBackgroundTintList(ColorStateList.valueOf(res.getColor(R.color.green,mContext.getheme()));
}否则{
holder.indicatorLL.setBackgroundTintList(ColorStateList.valueOf(res.getColor(R.color.red,mContext.getheme()));
}