根据自定义适配器中的位置设置列表行背景

时间:2014-03-10 17:28:29

标签: android android-adapter

我有一个用于构建List的自定义适配器。在我的适配器中,我希望第一行,第二行和第三行显示特定颜色作为其各自的背景,为了实现这一点,使用下面的代码。然而,似乎背景甚至被复制到不是(0,1,2)的行。我似乎紧接在底行下方的行将被视为行(0),依此类推并得到背景。我该如何解决这个问题:

public class TopfragmentAdapter extends BaseAdapter {

private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader; 

 public TopfragmentAdapter (Activity a, ArrayList<HashMap<String, String>> d) {
    activity = a;
    data=d;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    imageLoader=new ImageLoader(activity.getApplicationContext());

}


public int getCount() {
    return data.size();
}

public Object getItem(int position) {
    return data.get(position);
}

public long getItemId(int position) {
    return position;
}
public static class ViewHolder {
   TextView name;
   TextView track;
   TextView number;
   ImageView thumb;
}
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    View vi=convertView;
    if(convertView==null){
        vi = inflater.inflate(R.layout.layout_bnmtoptenlistrow, null);

    holder = new ViewHolder();
    holder.name = (TextView)vi.findViewById(R.id.topten_artist_name); 
    holder.track = (TextView)vi.findViewById(R.id.topten_album_name); 
    holder.number= (TextView)vi.findViewById(R.id.topten_number);
    holder.thumb=(ImageView)vi.findViewById(R.id.topten_list_image); 

    vi.setTag(holder);
    }
    else {
        holder = (ViewHolder) vi.getTag();
    }

    HashMap<String, String> hash = new HashMap<String, String>();
    hash = data.get(position);



    holder.name.setText("Artist: "+hash.get(TopListfragment.KEY_NAME));
    holder.track.setText("Track: "+hash.get(TopListfragment.KEY_TRACK_NAME));
    holder.number.setText(hash.get(TopListfragment.KEY_NUMBER)+" listens");
    imageLoader.DisplayImage(hash.get(TopListfragment.KEY_IMAGE_URL), holder.thumb);

    SetRowColour(vi,position);
    return vi;
}

private void SetRowColour(View view,int Position){
    if( Position==0){

        view.setBackgroundResource(R.drawable.gold_gradient);
   }
    else if( Position==1){
        view.setBackgroundResource(R.drawable.silver_gradient);
   }
    else if( Position==2){
        view.setBackgroundResource(R.drawable.bronze_gradient);
   }

}

}

1 个答案:

答案 0 :(得分:0)

在这种情况下,我必须为基础数据分配一个位置,并使用它来交替颜色。 (视图中的位置只是对象的相对位置,正如我所发现的那样,根据滚动视图的速度等因素,它有点变化。)

我创建了自己的对象并使用了该对象的ArrayList,因为我正在初始化我的对象分配了一个位置(基本上是偏移量)。然后我对我的对象位置进行了模数计算。

TransList tl = entries.get(position);   // TransList is my own object, entries is the array list of objects
int Position = tl.getPosition();

if ( (Position % 3) == 0 ) {
} else if ( (Position % 3) == 1 ) {
} else if ( (Position % 3) == 2 ) {
}