我无法使用findViewById重新引用TableRow

时间:2019-10-19 19:09:54

标签: java android android-studio

我有一个活动,我以编程方式创建Tablerow,因为我不知道需要多少文件。 每个TableRow的ID均以100开头,并以200、300等等继续。 当我创建第3行时,TableRow的ID为300。 然后,当有人编辑另一行时,我需要知道哪一行适合与该行的元素一起使用。

我的问题:先前的值: trActiva.getId()= 300

这是我输入的代码:

justify-content: space-evenly

就在这两行之前的位置trActiva.getId()= 300 代码的第一行之后lineaActiva = 200 这意味着第二行之后trActiva.getId()应该为200,但仍为300。

更多奇怪的事情: 在这两行之后:

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

这是怎么回事?为什么trActiva没有改变?

谢谢!

1 个答案:

答案 0 :(得分:0)

我们不确定您如何增加ID和如何存储数据,以及如何在计算机屏幕上查看300行
因此缺少很多代码,无法为您的问题提供非常明确的答案
这是我们从Derby数据库填充的表
该表名为ptable,我们可能还会提到我们正在使用“模型视图控制器”模式来管理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();  
}

然后我们编写侦听器代码,以允许我们查看所选行的详细信息
请注意,我们从选定的行中获取ID
您可以在此处使用该值查找大于300的新条目。
或者,您可以在表上编写搜索查询,以查找ID大于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);
        }
    });
} 

希望这会有所帮助,欢迎使用Stack Overflow
请以后再发布一些代码,以便您的问题有更明确的答案