[英]How to change the background image of a Listview button according to the position?
我的列表视图包含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;
}
}
任何帮助将不胜感激。
我的朋友,您有一个简单的问题,这是由于Android Adapter实现在离开屏幕后会重新使用这些组件,因此,它需要选择一个按钮,而背景已被更改,因此必须设置逻辑以使它返回到默认背景。 这是由于缺少完整的文档读取而导致的常见错误。 这是一个类似的问题: 设置ListView项的颜色
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;
}
在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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.