【问题标题】:Problem adressing ViewById in Kotlin - android:id not equals view:id ? (newbie question)在 Kotlin 中解决 ViewById 的问题 - android:id 不等于 view:id ? (新手问题)
【发布时间】:2021-02-02 21:42:57
【问题描述】:

我是 Kotlin 的新手,面临以下挑战:我定义了一个 TableLayout,它合并了其中的多个其他 TableLayout。我认为它们是我 UI 的一种正方形,我想让它们简单地可点击。

所以我做了以下在 MultiSquare.xml 的 TableRow 中定义一行 3 个 TableViews:

  <TableRow
    android:padding="5dp">
    <include layout="@layout/basesquare" android:id="@+id/square01"/>
    <include layout="@layout/basesquare" android:id="@+id/square02"/>
    <include layout="@layout/basesquare" android:id="@+id/square03"/>
</TableRow>

并尝试在我的 MultiSquareActivity 中解决它们:

 val mySquare01 : TableLayout = findViewById(R.id.square01)
    mySquare01.setOnClickListener {
        tvOutputMessage = findViewById(R.id.textView)
        tvOutputMessage.text = "Table" + mySquare01.id +  " was clicked!"
    }

但是,我刚刚收到 R.id.square01 为 null 的错误消息 - 哎呀,我真的不明白为什么。希望有人能帮忙^^

问题是:ViewActivity中的square1如何寻址?

【问题讨论】:

  • 你在MultiSquareActivity的onCreate函数中setContentView(R.layout.MultiSquare)吗?
  • 是的,我做到了 - 正是 val val mySquare01 之前的代码行:TableLayout .... 等

标签: android xml android-studio kotlin


【解决方案1】:

好的,所以我自己想通了 - 我的方法有 2 个问题:

1.) 我必须摆脱 Square.xml 中的合并标签,我合并到 MultiSquare.xml 中

2.) 我什至必须在包含的表格中为我的 TableLayout 的子表格设置一个 Id,这听起来有点奇怪,但它确实有效。

Square.xml:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:width="165dp">
  <TableRow>
     <include layout="@layout/basetable" android:id="@+id/basetable01"/>
     <include layout="@layout/basetable" android:id="@+id/basetable02"/>
     <include layout="@layout/basetable" android:id="@+id/basetable03"/>
  </TableRow>
</TableLayout>

Multisquare.xml:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="*"
android:width="1545dp"
android:padding="1.5dp">
  <TableRow android:padding="5dp">
     <include layout="@layout/basesquare" android:id="@+id/square01"/>
     <include layout="@layout/basesquare" android:id="@+id/square02"/>
     <include layout="@layout/basesquare" android:id="@+id/square03"/>
  </TableRow>
</TableLayout>

MultiSquareActivity:

    private lateinit var mySquare01 : TableLayout

    mySquare01 = findViewById(R.id.square01)
    val square01basetable01: TableLayout = mySquare01.findViewById(R.id.basetable01)
    
    square01basetable01.setOnClickListener {
       ...
    }

   

【讨论】:

    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 2021-06-13
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2011-02-17
    相关资源
    最近更新 更多