如何从我从JavaClass创建的EditText中获取文本

如何从我从JavaClass创建的EditText中获取文本,java,android,android-studio,android-layout,Java,Android,Android Studio,Android Layout,我是androidstudio的新手,我正在尝试从一个EditText中获取文本,这个EditText是我从一个java类创建的,而不是在xml中可视化的。该项目的主要想法是尝试做一个数独游戏,因此我有: 9x9表 81个数字的数组 表格的一些方块有EditText,其他方块有TextView(如数独) 但问题是我不知道如何从EditText中获得getText,因为 它们不是以正常方式创建的,因此我无法为它们执行“r.id.edittext_1” 例如 还有另一种获取文本的方法吗 我的文件

我是androidstudio的新手,我正在尝试从一个EditText中获取文本,这个EditText是我从一个java类创建的,而不是在xml中可视化的。该项目的主要想法是尝试做一个数独游戏,因此我有:

  • 9x9表
  • 81个数字的数组
  • 表格的一些方块有EditText,其他方块有TextView(如数独)
但问题是我不知道如何从EditText中获得getText,因为 它们不是以正常方式创建的,因此我无法为它们执行“r.id.edittext_1” 例如

还有另一种获取文本的方法吗

我的文件:

tabla.java(在这里我创建了表以及所有的EditText和TextView)

从nivel1类中调用它

 String texto = tabla.returnText(tag);
感谢大家的时间和帮助。

我不知道如何从编辑文本中获取文本


我不确定您不理解什么,但EditText实际上有一个
getText()
方法。它返回一个
可编辑的
,要从中获取字符串,您只需在该字符串上调用
toString()

当您使用行/列创建EditText setTag时

EditText texto = new EditText(actividad);
textTo.setTag(row+col);
当您需要getText()时


您需要找到某种访问EditText对象的方法。我建议在你们班上使用一种方法。大概是这样的:

public class Tabla {

    public TextView getViewAt(int row, int column) {
        return (TextView) filas.get(row).getChildAt(column);
    }
}

最简单的方法是将所有
EditText
像其他数据一样保存在一个数组中

EditText[]ets=新的EditText[9][9]

在成员字段中,并在循环中逐个分配

我不懂你的语言,所以我只写一个简单的例子

for(int y=0; y<9; y++) {
    for(int x=0; x<9; x++) {
        EditText et = ets[y][x] = new EditText(...);
        // initialize, attatch listeners to et
    }
}
稍后,您可以检查
fixed[y][x]
以检查是否存在
EditText
TextView
,如果它是
EditText
,则像
EditText et=(EditText)tvs[y][x]一样强制转换

或者,使用类似的
实例检查

if(tvs[y][x] instanceof EditText) {
     EditText et = (EditText) tvs[y][x];
     // do something with et
}

创建EditText时,使用行/列编号设置标记并添加TextWatcher。所以当文本在任何编辑文本中更改时。在afterTextChanged回调中,在Tag fill your array.ok的帮助下,我添加了Tag texto.setTag(“EditText”+i);现在我需要在nivel1.java中添加一个TextWatcher,对吗@重写public void afterTextChanged(我需要在这里放什么?{}是的,我知道,但是EditText在应用程序启动之前不存在,因为它们是在Tabla.java中创建的,而不是在布局中创建的,所以我无法以正常方式用getText()调用它们。为什么不呢?区别是什么?在java类中,它们被称为“texto”EditText texto=newedittext(actividad);但是我如何从nivel1.java获取getText呢?如果(id==R.id.resolvertop){texto.getText();return true;},我不能做texto.getText(),我不知道android studio对我说“无法解析符号texto”。问题是texto只存在于定义它的循环中。例如,如果您在类级别保存它们中的每一个,您就可以访问它们,就像您定义从布局文件获得的视图一样,这是一个错误,您将得到具有相同标记的多个视图。例如,第1行第5列和第5行第1列将具有相同的标记。@Midslefko如果行和列为stringsrow+col只是一个提示,我们可以使用任何唯一的标记来标识。我创建了EditText texto=(EditText)tabla.findViewWithTag(1);getText();在nivel1.java中,如果我把它放在OnOptionsItemsSelected()中,它会说“无法解析符号tabla”,如果我把它们放在按钮OnClick()中的OnCreate()中,“tabla是从内部类中访问的,需要声明为final”,如果我将它声明为final,“无法解析方法finViewWithTag”.好的,Tabla是你的自定义类,我想是TableLayout。您可以在任何视图上调用findViewWithTag。所以您可以在Tabla类中创建方法,该类使用TableLayout来查找dviewWithTag
EditText texto = new EditText(actividad);
textTo.setTag(row+col);
EditText texto = (EditText)tabla.findViewWithTag(row+col);
textto.getText()
public class Tabla {

    public TextView getViewAt(int row, int column) {
        return (TextView) filas.get(row).getChildAt(column);
    }
}
for(int y=0; y<9; y++) {
    for(int x=0; x<9; x++) {
        EditText et = ets[y][x] = new EditText(...);
        // initialize, attatch listeners to et
    }
}
TextView[][] tvs = new TextView[9][9];


// ...


for(int y=0; y<9; y++) {
    for(int x=0; x<9; x++) {
        if( fixed[y][x] ) { // check if the number of the cell is fixed.
            tvs[y][x] = new TextView(...);
            // Initialize tvs[y][x];
        } else {
            tvs[y][x] = new EditText(...);
            // initialize, attatch listeners to tvs[y][x];
        }
    }
}
if(tvs[y][x] instanceof EditText) {
     EditText et = (EditText) tvs[y][x];
     // do something with et
}