问题描述
是否可以按特定顺序对 CharmlistView 进行排序?
该列表包含范围内的 BLE 蓝牙设备的名称。如何按以下方式进行排序? :
如果设备包含字符串:1-
,则该设备属于Category XYZ
;
如果字符串包含:2-
,则该设备属于Category XXX
。等等...
当显示 CharmlistView
时,我们应该首先看到 Category XYZ
,然后是 Category ABC
在 CharmListView example 中,使用以下代码片段进行排序:
if(ascending){
charmlistView.setHeaderComparator((d1,d2) -> d1.compareto(d2));
charmlistView.setComparator((s1,s2) -> Double.compare(s1.getDensity(),s2.getDensity()));
ascending = false;
} else {
charmlistView.setHeaderComparator((d1,d2) -> d2.compareto(d1));
charmlistView.setComparator((s1,s2) -> Double.compare(s2.getDensity(),s1.getDensity()));
ascending = true;
}
我不明白 charmlistView.setHeaderComparator((d1,d2) -> d2.compareto(d1));
和
CharmlistView.setComparator((s1,s1.getDensity()));
正在工作。
默认情况下,标题按自然顺序(按字母顺序)排序。如何不按字母顺序排序,而只按我提供的特定顺序排序?
Category XYZ
应该在最上面
package com.hacare.views;
import com.gluonhq.attach.ble.BleDevice;
import com.gluonhq.attach.ble.BleService;
import com.gluonhq.charm.glisten.application.MobileApplication;
import com.gluonhq.charm.glisten.control.AppBar;
import com.gluonhq.charm.glisten.control.CharmlistCell;
import com.gluonhq.charm.glisten.control.CharmlistView;
import com.gluonhq.charm.glisten.control.ListTile;
import com.gluonhq.charm.glisten.mvc.View;
import com.gluonhq.charm.glisten.visual.MaterialDesignIcon;
import com.hacare.objects.MyBleDevice;
import javafx.collections.FXCollections;
import javafx.collections.Listchangelistener;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
public class PrimaryPresenter {
/**
* List of ble devices nearby
*/
ObservableList<BleDevice> ble_device_list = FXCollections.observableArrayList();
@FXML
private View primary;
@FXML
private CharmlistView<BleDevice,String> ble_device_charmlistview;
/**
* Controller init function
*/
public void initialize() {
primary.showingproperty().addListener((obs,oldValue,newValue) -> {
if (newValue) {
AppBar appBar = MobileApplication.getInstance().getAppBar();
appBar.setNavIcon(MaterialDesignIcon.MENU.button(e ->
MobileApplication.getInstance().getDrawer().open()));
appBar.setTitleText("Primary");
appBar.getActionItems().add(MaterialDesignIcon.BLUetoOTH.button(e ->
buttonClick()));
}
});
ble_device_charmlistview.setHeadersFunction(MyBleDevice::geto_device_type);
ble_device_charmlistview.setComparator((o1,o2) -> {
if(o2.getName().contains(":1-")){
//test statement
return 1;
}
//test statement
return 0;
});
ble_device_charmlistview.setCellFactory(bleDeviceStringCharmlistView -> new CharmlistCell<BleDevice>(){
@Override
public void updateItem(BleDevice item,boolean empty) {
super.updateItem(item,empty);
if(item!=null && !empty){
ListTile tile = new ListTile();
tile.textproperty().add(item.getName());
Image image = new Image("/icon.png");
if(item.getName().contains("HAcare_Y4")){
image = new Image("imgs/y-type-y4_64x64.jpg");
}
else{
image = new Image("/icon.png");
}
tile.setPrimaryGraphic(new ImageView(image));
setText(null);
setGraphic(tile);
}
}
});
ble_device_charmlistview.selectedItemproperty().addListener((observableValue,bleDevice,t1) ->
{
System.out.println(ble_device_charmlistview.getSelectedItem().getAddress());
}
);
}
@FXML
void buttonClick() {
ble_device_list.clear();
//dummy devices
BleDevice device1 = new BleDevice();
device1.setAddress("AB:CD:EF:GH:IJ:KL");
device1.setName("HAcare_Y4:1-CW71");
BleDevice device2 = new BleDevice();
device2.setAddress("MN:CD:EZ:AH:FJ:CL");
device2.setName("dummy device");
BleDevice device3 = new BleDevice();
device3.setAddress("AK:CD:ED:FE:AJ:KL");
device3.setName("HAcare_Y4:1-AZ5K");
ble_device_list.add(device1);
ble_device_list.add(device2);
ble_device_list.add(device3);
ble_device_charmlistview.setItems(ble_device_list);
BleService.create().ifPresent(ble ->
ble.startScanningDevices().addListener((Listchangelistener.Change<? extends BleDevice> c) -> {
while (c.next()) {
if (c.wasAdded()) {
for (BleDevice device : c.getAddedSubList()) {
System.out.println("Device found: " + device.getName());
ble_device_list.add(device);
ble_device_charmlistview.setItems(ble_device_list);
}
}
}
}));
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)