我尝试根据ListView上的用户状态设置不同的颜色。但是当我滚动ListView时,另外一些单元格也会改变它的形状作为例子:
我需要这样的形状(每个矩形都在一个单元格内):
但是在一些卷轴之后,它们仍然是这样的:
这是我的代码的一部分:
userListView.setCellFactory(userCell -> new UserCellController());
Class UserCellController:
public class UserCellController extends ListCell<UserPopulate> {
@FXML
private Rectangle statusShape;
private FXMLLoader mLLoader;
@Override
protected void updateItem(UserPopulate user, boolean empty) {
super.updateItem(user, empty);
if(empty || user == null) {
setText(null);
setGraphic(null);
} else {
if (mLLoader == null) {
mLLoader = new FXMLLoader(getClass().getResource("/view/userCell.fxml"));
mLLoader.setController(this);
try {
mLLoader.load();
} catch (IOException e) {
e.printStackTrace();
}
}
if ( user.getUserStatus().toString().equals("3") ) {
statusShape.setFill(Color.RED);
}
setText(null);
setGraphic(cellPane);
}
}
}
我只需要具有RED形状的第二个单元格(用户状态== 3)。
答案 0 :(得分:0)
您需要else
来使用if
:
// surely you shouldn't actually be testing for string equality here?
if ( user.getUserStatus().toString().equals("3") ) {
statusShape.setFill(Color.RED);
} else {
// or whatever the default color is...
statusShape.setFill(Color.BLUE);
}
问题是,如果一个单元格持有状态为3
的用户,然后重复使用(例如在用户滚动期间)以保持具有不同状态的用户,那么颜色将不会被重置,除非你明确地为它编码。
基本规则是updateItem()
中的代码需要涵盖所有情况。