1

我的列表视图包含 200 多个项目。在列表视图的每一行中,都有一个 Button。我想根据位置更改按钮背景。好吧,我也可以更改它,但问题是在滚动列表视图后,图像被分配给其他按钮。如果我正在更改按钮文本,一切都很好但是如果更改按钮背景,就会出现这个奇怪的问题。

以下是我到目前为止尝试过的,

public class MyAdapter extends BaseAdapter {

    private Activity activity;
    private String[] data;
    private static LayoutInflater inflater=null;
    public ImageLoader imageLoader; 

    public MyAdapter(Activity a, String[] d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoader(activity.getApplicationContext());
    }

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

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.item, null);

        Button button=(Button)vi.findViewById(R.id.text);;

        if (position==2 || position==3) {
           button.setText("Invited");
           } 
         else if (position==5 || position==8) {
         button.setBackgroundResource(R.drawable.graph);
          }
       else {
       text.setText("Invite");
       }

        return vi;
    }
}

任何帮助将不胜感激。

4

3 回答 3

1

我的朋友,你有一个简单的问题,这是因为 Android Adapter 实现一旦离开屏幕就会重新使用组件,所以它需要一个背景已经改变的按钮,所以你必须在你的逻辑中设置它回到默认背景。这是缺少完整文档读取的常见错误。这是一个类似的问题:Setting color of ListView items

于 2013-07-08T13:04:45.127 回答
0

ListView回收视图,这意味着你必须重置getView()方法中的状态,所以这样做:

public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.item, null);

    Button button=(Button)vi.findViewById(R.id.text);;
    button.setBackgroundResource(0); // reset the color again
    if (position==2 || position==3) {
       button.setText("Invited");
     } else if (position==5 || position==8) {
       button.setBackgroundResource(R.drawable.graph);
     } else {
       text.setText("Invite");
     }

    return vi;
}
于 2013-07-08T13:04:27.557 回答
0

在getview方法中使用奇偶数逻辑............

public View getView(int position, View convertView, ViewGroup parent) {

if(convertView==null)
    vi = inflater.inflate(R.layout.item, null);

if (position % 2 == 0) {
   button.setBackgroundResource(R.drawable.list_1);
 }else {
   button.setBackgroundResource(R.drawable.list_2);
 }

return vi;

}

于 2013-07-08T13:11:47.147 回答