试图在表格行下获取子视图的ID

问题描述 投票:1回答:1

我正在开发一个具有长形式的应用程序,因此很难为每个屏幕手动执行findViewById。我在屏幕上有以下结构,我被卡住了。

Relative layout
->TableLayout
-->TableRow
--->And then each table row has 3 edittext in its own columns. 

我这样做

           TableLayout table = (TableLayout)findViewById(R.id.screen8_table1);
           int rowCount = table.getChildCount();

           TableRow rows = (TableRow)table.getChildAt(0);
           int viewCount = rows.getChildCount();
           EditText thisView = new EditText(getApplicationContext());
           View theView = rows.getChildAt(1);
           int Id = theView.getId();
           thisView.findViewById(Id);
           text = thisView.getText().toString();
           Log.i("View value",text);

当我尝试获取ID时显示-1。请帮忙。

在Pavneet Singh的回答之后,我在代码中进行了一次更改

        FloatLabeledEditText et_one = (FloatLabeledEditText)rows.getChildAt(1);
        text = et_one.getEditText().getText().toString();

现在它的工作正常。在这里为我节省大量的代码!

java android views
1个回答
3
投票

你正在创建一个新的EditText,它不是TableRow的孩子。

EditText thisView = new EditText(getApplicationContext());
View theView = rows.getChildAt(1);
int Id = theView.getId();

你可以直接把它取出来

EditText eText_one = (EditText)rows.getChildAt(1);
// no need to use any id to fetch edittext reference
text = eText_one.getText().toString();

更新:你正在使用customize editext所以使用

 com.wrapp.floatlabelededittext.FloatLabeledEditText et_one =
                  (com.wrapp.floatlabelededittext.FloatLabeledEditText)rows.ge‌​tChildAt(1);

虽然这可以通过设计库提供的TextInputLayout来实现

© www.soinside.com 2019 - 2024. All rights reserved.