有没有办法检索分配给 TableLayout 对象的变量名称以从另一个对象中识别?

Posted

技术标签:

【中文标题】有没有办法检索分配给 TableLayout 对象的变量名称以从另一个对象中识别?【英文标题】:Is there a way to retrieve a variable name assigned to a TableLayout object to identify one from another? 【发布时间】:2021-08-22 19:20:31 【问题描述】:

问题:我很难找到一种方法来识别两个 TableLayout 对象中的哪一个被传递给一个方法。

我正在尝试做的事情:我正在尝试将 Singleton 类与静态方法列表一起使用,这些静态方法在创建和或编辑 TableLayout 编程盟友时执行常见的设置功能。

例如,由于在 TableRow 中为每个 TableLayout 创建一个“添加”Button 是相同的,除了按钮 OnClickListener 操作之外,我想简单地传递 TableLayout 对象。然后我使用该对象的 TableLayout 变量名称来识别正确的 OnClickListener 设置。

在下面的代码示例中,if - else 是我想做的一个示例。我知道没有方法name()...这是我在代码中演示我想做的事情的方式。

private Button setupAuthorsAddRowButton(Context context, TableLayout table)
    Button btnAddRow = new Button(context);
    TableRow.LayoutParams trLayoutParams = new TableRow.LayoutParams(0, TableRow.LayoutParams.MATCH_PARENT);
    trLayoutParams.setMargins(3,3,3,3);
    btnAddRow.setLayoutParams(trLayoutParams);
    btnAddRow.setBackgroundColor(Color.WHITE);
    btnAddRow.setText("+");
    btnAddRow.setTypeface(Typeface.DEFAULT,Typeface.BOLD);
    btnAddRow.setGravity(Gravity.CENTER);
    btnAddRow.setPadding(5,5,5,5);
    if(table.name().equals("tableLayoutAuthors"))  // name() is not a real method, just an example
        btnAddRow.setOnClickListener(v -> table.addView(setupAuthorsTableRow("", "", "", "", false)));
    else if(table.name().equals("tableLayoutFiles"))
        btnAddRow.setOnClickListener(v -> table.addView(setupFilesTableRow("", "",  false)));
    return btnAddRow;

更新:尝试使用setTag()getTag() 来识别两个不同的TableLayouts 似乎不起作用。 mTag 变量出现null。我可能做得不对,但设置如下:

setTag()

    tableLayoutFiles = findViewById(R.id.table_files);
    tableLayoutFiles.setTag(R.id.table_files, "tableFiles");
    tableLayoutAuthors = findViewById(R.id.table_authors);
    tableLayoutAuthors.setTag(R.id.table_authors, "tableAuthors");

getTag()

    if(table.getTag()=="tableAuthors")
        btnAddRow.setOnClickListener(v -> table.addView(setupAuthorsTableRow(context, table, "", "", "", "", false)));
    else if(table.getTag()=="tableFiles")
        btnAddRow.setOnClickListener(v -> table.addView(setupFilesTableRow(context, table, "", "",  false)));
    return btnAddRow;

mTag 变量

【问题讨论】:

【参考方案1】:

您可以使用setTag 方法,该方法允许您将任意对象设置为视图。例如:

logoText.setTag(R.id.table_tag_key, "Table1");

然后使用getTag 检索它。

https://developer.android.com/reference/android/view/View#setTag(int,%20java.lang.Object)

【讨论】:

您好,我发布了更新尝试您的建议,我认为这是正确的方向,但它似乎没有工作。所以我发布了一个更新,以审查我可能做错了什么。 您必须使用getTag(int) 版本,支持key 参数的版本,这将与您用于识别标签的标签键相同。 developer.android.com/reference/android/view/View#getTag(int) 感谢您的澄清和帮助

以上是关于有没有办法检索分配给 TableLayout 对象的变量名称以从另一个对象中识别?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Swift 中一次将委托分配给同一类的多个对象?

有没有办法绕过批量分配保护?

我可以以任何方式从 OpenCV 对象取消引用中将数据分配给双重函数返回检索吗?

如何找出分配给 javascript 对象的内存量? [复制]

将运算符分配给 R 变量

有没有办法将格式化的 BigDecimal 数字分配给 BigDecimal?