android - 从一组 4 种颜色中设置列表项中的颜色

标签 android listview android-adapter

在我的应用程序中,我有一个 ListView 。在列表项的每一行中都有一个 TextView ,它显示名称的初始字符,就像在许多联系人应用程序中一样。我必须从 colors.xml 中定义的一组预定义的 4 种颜色中设置该 TextView 的背景颜色。我想要的是颜色应该在 ListView 中的每 4 个项目之后重复。为此,我使用了以下逻辑

 color_array=activity.getResources().getIntArray(R.array.dar_list_color);

    if (count<4) {
   viewHolder.layout_color.setBackgroundColor(color_array[count]);

  }

  else
  count=0;


  count++;

这东西工作正常,但有一个问题,listview 的常见问题,即滚动颜色变化。由于计数与适配器的位置无关,我不知道如何解决这个问题。

这是我实现的截图 Current Result

这是完整的适配器代码

public class DAR_Aadapter extends BaseAdapter  {
 int color_array[],count=0;
 Activity activity;
 ArrayList<DAR_List_Item> dar_List_Items;

 public DAR_Aadapter(Activity activity, ArrayList<DAR_List_Item> dar_List_Items) {
  // TODO Auto-generated constructor stub

  this.activity=activity;
  this.dar_List_Items=dar_List_Items;
  color_array=activity.getResources().getIntArray(R.array.dar_list_color);

 }


 @Override
 public int getCount() {
  // TODO Auto-generated method stub
  return dar_List_Items.size();
 }

 @Override
 public Object getItem(int position) {
  // TODO Auto-generated method stub
  return dar_List_Items.get(position);
 }

 @Override
 public long getItemId(int position) {
  // TODO Auto-generated method stub
  return 0;
 }

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
  // TODO Auto-generated method stub
  ViewHolder viewHolder;
  if(convertView==null)
  {
   viewHolder = new ViewHolder();
   convertView = LayoutInflater.from(activity).inflate(R.layout.dar_swipe_list_layout, null);

   viewHolder.clientname= (TextView)convertView.findViewById(R.id.Client_name);
   viewHolder.client_initial= (TextView) convertView.findViewById(R.id.client_initial);
   viewHolder.text_contactedpaerson= (TextView)convertView.findViewById(R.id.text_contacted);
   viewHolder.text_contacttype= (TextView)convertView.findViewById(R.id.text_contact_type);
   viewHolder.text_createddate= (TextView)convertView.findViewById(R.id.text_Created_date);
   viewHolder.text_requestdate= (TextView)convertView.findViewById(R.id.text_request_date);
   viewHolder.text_productname= (TextView)convertView.findViewById(R.id.text_product);
//   viewHolder.text_status= (TextView)convertView.findViewById(R.id.text_status);


   viewHolder.contactedpaerson= (TextView)convertView.findViewById(R.id.contacted);
   viewHolder.contacttype= (TextView)convertView.findViewById(R.id.contact_type);
   viewHolder.createddate= (TextView)convertView.findViewById(R.id.create_date);
   viewHolder.requestdate= (TextView)convertView.findViewById(R.id.request_date);
   viewHolder.productname= (TextView)convertView.findViewById(R.id.product);
//   viewHolder.status= (TextView)convertView.findViewById(R.id.status);
   viewHolder.layout_color= (LinearLayout) convertView.findViewById(R.id.client_initial_layout);

   convertView.setTag(viewHolder);

  }else
  {
   viewHolder = (ViewHolder)convertView.getTag();
  }
   viewHolder.clientname.setText(dar_List_Items.get(position).getClient_name());
      String temp=viewHolder.clientname.getText().toString();
      viewHolder.client_initial.setText(""+temp.charAt(0));
   viewHolder.contactedpaerson.setText(dar_List_Items.get(position).getContacted_person());
   viewHolder.contacttype.setText(dar_List_Items.get(position).getContact_type());
   viewHolder.createddate.setText(dar_List_Items.get(position).getCreated_date());
   viewHolder.productname.setText(dar_List_Items.get(position).getproduct_name());
   viewHolder.requestdate.setText(dar_List_Items.get(position).getRequest_date());
//   viewHolder.status.setText(dar_List_Items.get(position).getStatus());

  if (count<4) {
   viewHolder.layout_color.setBackgroundColor(color_array[count]);

  }

  else
  count=0;


  count++;



   return convertView;


 }




 public static class ViewHolder
 {
  LinearLayout layout_color;
  TextView clientname,client_initial,text_contactedpaerson,contactedpaerson,text_contacttype,contacttype,text_productname,productname,text_status,status,createddate,text_createddate,text_requestdate,requestdate;
 }

}

最佳答案

这样的事情怎么样?

count = position % color_array.length();
switch(count) 
{
      case 0:
      viewHolder.layout_color.setBackgroundColor(color_array[count]);
      break;

      case 1:
      case 2:
      case 3:
        //handle these cases separately
        //viewHolder.layout_color.setBackgroundColor(color_array[count]); 
        break;

}

它使您可以灵活地分别处理每个案例。您在哪里初始化 count

关于android - 从一组 4 种颜色中设置列表项中的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36149671/

相关文章:

android - 如何将两个适配器设置为一个 RecyclerView?

Android listview - 获取自定义listview的文本

android - Firebase session 失效

android - 我如何在我的 Android 应用程序中看到完整的 ListView

java - 如何从 Android 的 ListView 中正确删除项目?

Java + JavaFX : does it make sense to periodically clear a ListView content on the long run?

java - 防止过滤适配器数据时重新加载图像 [Android]

java - 将数据发送到 viewpager 的特定 fragment

ANDROID:按下按钮后如何延迟?

android - 使用隐式 Intent 启动 Activity ?