您需要在您的 ListAdapter 中实现此方法,每次您的行视图由于用户滚动列表而从屏幕外变为屏幕时都会调用该方法。传递给您的 getView 方法的 View 实际上可能用于显示完全不同的行的数据。这是因为对象被回收 - 如果您有 1,000 行的数据,但屏幕上只有 8 个视图,系统会为您的行创建 8 个视图对象,而不是 1,000 个。
如果你的类实现了 ListAdapter,你可以重写 getView 方法,如下所示:
public class MyClass implements ListAdapter {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
//Create a view for this row if none exists yet
if (rowView == null) {
LayoutInflater inflater = (LayoutInflater) _context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.YOUR_ROW_LAYOUT, parent, false);
//make the button go away if it should not be visible
if (buttonShouldBeNotVisible(convertView)) { //Your code should determine this
convertView.checkbox.setVisibility(View.INVISIBLE);
//Use View.GONE to make it take up no space
}
return convertView
} }