我有一个用于构建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);
}
}
}
答案 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 ) {
}