Я не могу повторно сослаться на TableRow с findViewById - PullRequest
0 голосов
/ 19 октября 2019

У меня есть действие, где я создаю Tablerow программно, так как я не знаю, сколько файлов мне нужно. Каждый TableRow имеет идентификатор, начинающийся с 100 и продолжающийся 200, 300 и так далее. Когда я создаю строку 3, идентификатор TableRow равен 300. Затем, когда кто-то редактирует другую строку, мне нужно знать, какая строка просто для работы с элементами строки.

Моя проблема: предыдущее значение: trActiva.getId() = 300

Тогда это мой код, который я поставил:

 lineaActiva = (tv.getId()) / 100 * 100;
 trActiva = findViewById(lineaActiva);

как раз на точку перед этими двумя строками trActiva.getId () = 300 после первой строки кода lineaActiva= 200 Это означает, что после второй строки trActiva.getId () должно быть 200, но все равно 300.

Более странные вещи: после этих двух строк:

trActiva.getId()=300
findViewById(lineaActiva).getId()=200

Что здесь происходит? Почему trActiva не меняется?

Спасибо !!

1 Ответ

0 голосов
/ 20 октября 2019

Мы не уверены, как вы увеличиваете свой идентификатор и как вы храните свои данные, а также как вы просматриваете 300 строк на экране компьютера
Так что не хватает большого количества кода, чтобы дать очень точный ответ на ваш вопрос
Вот таблица, которую мы заполняем из базы данных Derby.
Таблица называется ptable, и мы могли бы также упомянуть, что мы используем шаблон Model View Controller для управления данными для переменных GET и SET
Сначала мы читаем избазы данных и заполняем ptable этим кодом

private void ReadFromParent() throws SQLException{

ObservableList<ParentModel> TableData = FXCollections.observableArrayList();
    stmnt = conn.createStatement();
    ResultSet rs = stmnt.executeQuery("SELECT * FROM Parent"); 
    while (rs.next()){// Add data to observableArrayList TableData to select a table ROW

    TableData.add(new ParentModel(rs.getString("PID"),rs.getString("pMonth"),rs.getString("pYear")));
    }
    PropertyValueFactory<ParentModel, String> IDCellValueFactory = new PropertyValueFactory<>("PID");
    colID.setCellValueFactory(IDCellValueFactory);
    PropertyValueFactory<ParentModel, String> DateCellValueFactory = new PropertyValueFactory<>("pMonth");
    colMonth.setCellValueFactory(DateCellValueFactory);
    PropertyValueFactory<ParentModel, String> TypeCellValueFactory = new PropertyValueFactory<>("pYear");
    colYear.setCellValueFactory(TypeCellValueFactory);

    // ================================================================
    // colTxDate are the ID's for the tableview columns
    // sortDate  are the Column Names for the Database TABLE CDBalance
    // ================================================================
    colMonth.setStyle("-fx-alignment: CENTER;");
    colYear.setStyle("-fx-alignment:CENTER;");

    Collections.sort(TableData, (p2, p1)-> p1.getPID().compareToIgnoreCase(p2.getPID()));
    // Line of Code above Sorts Database Columns based on VARIABLE in ParentModel
    // Change p2,p1 to sort Ascending or Descending
    if(TableData.size() < 15) {// Format TableView to display Vertical ScrollBar
        ptable.setPrefWidth(336);// 19 is the off set
    }else {
        ptable.setPrefWidth(355);
    }   ptable.setItems(TableData);
    stmnt.close();  
}

Затем мы пишем код слушателя, чтобы позволить нам просмотреть детали выбранной строки
Обратите внимание, что мы получаем идентификатор из выбранной строки
Здесь вы можете использовать это значение, чтобы найти новую запись, которая больше 300
ИЛИ вы можете написать поисковый запрос в таблицу, которая найдет все записи, которые имеют идентификатор больше 300

Вот код, который позволяет вам щелкнуть строку в таблице

    private void showTableDataDetails(ParentModel info) throws IOException{
    if (info != null) {
        info =  (ParentModel) ptable.getSelectionModel().getSelectedItem();
        strID = info.getPID();
        strMONTH = info.getPMonth();
        strYEAR = info.getPYear();
        toChildView();
        System.out.println("########### PID "+strID);
    } 
}

@Override
public void initialize(URL url, ResourceBundle rb) {

    ptable.getSelectionModel().selectedItemProperty().addListener((ObservableValue<? extends ParentModel>
        observable,ParentModel oldValue, ParentModel newValue) -> {
        try {
            showTableDataDetails((ParentModel) newValue); // When a row of the table is Selected call
            // Proper Construction                       // showTableDataDetails method
        } catch (IOException ex) {
            Logger.getLogger(ParentTableViewController.class.getName()).log(Level.SEVERE, null, ex);
        }
    });
} 

Надеюсь, это поможет, и добро пожаловать в стек Overflow
ПОЖАЛУЙСТА, опубликуйте немного больше кода в будущем, чтобы ваш вопрос мог иметь более четкий ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...