[英]RecyclerView onCreateViewHolder position background Color
我需要在onCreateViewHolder
設置背景顏色。 因此,當我的position
等於position % 2 == 0
設置背景顏色,否則請設置其他顏色。 我所有行的背景色都是標准色,這就是為什么我想在onCreateViewHolder
而不是onBindViewHolder
使用它。 如果我錯了請糾正我。 問題是,當我在onCreateViewHolder
使用holder.getAdapterPosition
,它返回'-1'
。 對我來說似乎很正常。 但是我該如何解決呢?
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_common_item, viewGroup, false);
ViewHolder holder= new ViewHolder(mView);
if(holder.getAdapterPosition % 2 ==0)
{
//Row BackgroundColor to red.
}
else
{
//Row BackgroundColor to Green.
}
return holder;
}
因此,當我使用上面的代碼時,我得到的例外是索引超出范圍。 有什么辦法可以解決?
嘗試這個:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_common_item, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(position % 2 ==0) {
holder.itemView.setBackgroundColor(
ContextCompat.getColor(holder.itemView.getContext(), R.color.color_red));
} else {
holder.itemView.setBackgroundColor(
ContextCompat.getColor(holder.itemView.getContext(), R.color.color_green));
}
}
根據理想的解決方案,您應該在onBindViewHolder中編寫此代碼以使用“ getAdapterPosition”。
如果您只希望onCreateViewHolder中行的背景顏色與您可以嘗試的不同,則這將連續為您提供一個紅色行和另一個其他顏色行。
您需要創建一個全局變量。
布爾型Manual_color = true;
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup,int viewType){
View mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_common_item, viewGroup, false);
ViewHolder holder= new ViewHolder(mView);
if(Manual_color)
{
//Row BackgroundColor to red.
Manual_color = false;
}
else
{
//Row BackgroundColor to Green.
Manual_color = true;
}
return holder;
您可以為已放大的視圖設置顏色。
View mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_common_item, viewGroup, false);
ViewHolder holder= new ViewHolder(mView);
if(holder.getAdapterPosition % 2 ==0) {
mView .setBackgroundColor(ContextCompat.getColor(this, R.color.color_red));
} else {
mView.setBackgroundColor(ContextCompat.getColor(this, R.color.color_green));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.