我有一个类 public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 0) { // [-1,0]
// Use the default slide transition when moving to the left page
view.setAlpha(1);
view.setTranslationX(view.getWidth() * -position);
//set Y position to swipe in from top
float yPosition = position * view.getHeight();
view.setTranslationY(yPosition);
view.setScaleX(1);
view.setScaleY(1);
} else if (position <= 1) { // (0,1]
// Fade the page out.
view.setAlpha(1 - position);
// Counteract the default slide transition
view.setTranslationX(pageWidth * -position);
// Scale the page down (between MIN_SCALE and 1)
float scaleFactor = MIN_SCALE
+ (1 - MIN_SCALE) * (1 - Math.abs(position));
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(0);
}
}
,其中包含一组名为Market
的{{1}}个对象。对于UI,我使用类型安全的构建器在tableview中创建列,如下所示:
MarketUpdate
m_updates
属性只是一个由override val root = tableview<Market> {
val sortedMarketList = SortedList<Market>(markets)
sortedMarketList.comparatorProperty().bind(this.comparatorProperty())
items = sortedMarketList
...
column("Strikes", Market::m_strikes)
...
对象直接拥有的SimpleIntegerProperty。但是,我需要能够构建这样的列:
m_strikes
其中Market
是...
column("Created At", Market::m_updates::first::m_time)
...
...
column("Last Update", Market::m_updates::last::m_time)
...
对象拥有的SimpleLongProperty。更新m_time
对象时,会在MarketUpdate
集合的末尾添加新的Market
对象。这意味着绑定需要自动从一个对象转换到另一个对象,并且需要通知tableview并更新自身以反映新对象中的数据。我认为通过上面描述的集合的MarketUpdate
和m_updates
函数进行绑定会以一种非常简单的方式捕获这个想法,但它不会被编译。
有许多属性,例如first()
和last()
。我怎样才能优雅地实现这一目标?
答案 0 :(得分:2)
如果我理解您的用例,您要做的是创建一个可观察的值,该值表示给定Market
对象中第一次和最后一次更新的时间属性。为此,您可以根据每个objectBinding
对象内的updates
列表创建Market
,然后提取first()
或last()
元素的{{1} }}。在以下示例中,只要在任何timeProperty
对象中扩充更新列表,TableView就会更新。
请记住,该示例要求每个Market
至少有一次更新。如果不是这种情况,请确保相应地处理null。
Market
我使用了SortedFilteredList来更轻松地处理排序。 sort在这里工作的原因是,列实际上由LocalDateTime值表示。
我希望这会给你一些想法:)