为什么不同的按钮会获得相同的ID?

时间:2018-05-16 20:13:09

标签: android android-studio kotlin

大家好日子,

我正在Kotlin中编写代码并尝试从两个不同的按钮获得不同的响应:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setContentView(R.layout.activity_language_choice)
    supportActionBar?.setDisplayHomeAsUpEnabled(true)

    mVisible = true

    // Set up the user interaction to manually show or hide the system UI.

    // Upon interacting with UI controls, delay any scheduled hide()
    // operations to prevent the jarring behavior of controls going away
    // while interacting with the UI.


    val btnCN = findViewById<LinearLayout>(R.id.custom_button_cn)
    val btnUK = findViewById<LinearLayout>(R.id.custom_button_uk)


    btnCN.setOnClickListener(this)
    btnUK.setOnClickListener(this)

    println(this)
    println(btnCN)
    println(btnUK)
}

override fun onClick(v: View?) {
    when(v?.id){
        R.id.custom_button_cn -> {
            println("CHINESE")
            println(v)
        }
        R.id.custom_button_uk -> {
            println("ENGLISH")
            println(v)
        }

        else -> {
            println("ELSE!!!")
        }
    }
}

不幸的是,我做错了。在日志中我得到以下内容:

05-16 23:04:17.884 8674-8674/com.example.user.app I/System.out: ENGLISH
    android.widget.LinearLayout{409e926 VFE...C.. ...P.... 0,0-1050,1050 #7f080035 app:id/custom_button_uk}
05-16 23:04:24.023 8674-8674/com.example.user.app I/System.out: ENGLISH
    android.widget.LinearLayout{409e926 VFE...C.. ...P.... 0,0-1050,1050 #7f080035 app:id/custom_button_uk}
05-16 23:04:27.771 8674-8674/com.example.user.app I/System.out: ENGLISH
    android.widget.LinearLayout{409e926 VFE...C.. ...P.... 0,0-1050,1050 #7f080035 app:id/custom_button_uk}

以下是我创建按钮的方法:

<RelativeLayout
        android:id = "@+id/rel_lay"
        android:layout_width="1280dp"
        android:layout_height="1280dp"
        android:layout_marginTop="35pt"
        >

        <LinearLayout
            android:id="@+id/custom_button_cn"
            android:layout_width="400dp"
            android:layout_height="400dp"
            android:background="@drawable/china_button_drawable" >

            <!-- Image (BG IMG) -->

            <ImageView
                android:layout_width="400dp"
                android:layout_height="400dp"
                android:src="@drawable/button_cn" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/custom_button_uk"
            android:layout_width="400dp"
            android:layout_height="400dp"
            android:background="@drawable/uk_button_drawable" >

            <!-- Image UK -->

            <ImageView
                android:layout_width="400dp"
                android:layout_height="400dp"
                android:src="@drawable/button_en" />
        </LinearLayout>

    </RelativeLayout>

我已经检查了代码并且无法找到任何错误,但我想我会错过某种Kotlin技巧。为了测试,我试图删除图像,为图像添加ID,尝试逐层访问,例如将id提供给相对布局,而不是线性,最后到图像,因此访问内心的事。尽管如此,它还没有奏效。你能解释一下解决按钮的正确方法是什么,并为每个按钮获得相应的活动吗?

2 个答案:

答案 0 :(得分:2)

RelativeLayout中,除非受布局约束的限制,否则子项将按声明的顺序排列在彼此之上。您的CN和UK按钮布局没有布局限制,因此UK按钮布局位于CN布局之上,并且由于它完全覆盖了底层布局,因此只能接收到点击。

您可以通过向布局添加相应的约束来使按钮彼此相邻。例如,android:layout_toEndOf="@id/custom_button_cn"custom_button_uk,或将父RelativeLayout更改为LinearLayout

答案 1 :(得分:1)

假设您的布局正常(参考@ laalto的答案),请尝试使用匿名监听器:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group

    android:checkableBehavior="single"
    >

        <item

            android:id="@+id/home"
            android:title="@string/home"
            android:icon="@mipmap/home"
        />

        <item

            android:id="@+id/sponsor_1"
            android:title="@string/spons1"
            android:icon="@mipmap/video"
         />

        <item

            android:id="@+id/sponsor_2"
            android:title="@string/spons2"
            android:icon="@mipmap/video"
            />

        <item

            android:id="@+id/sponsor_3"
            android:title="@string/spons3"
            android:icon="@mipmap/video"
        />

        <item

            android:id="@+id/history"
            android:title="@string/NavHistory"
            android:icon="@mipmap/history"
        />

        <item

            android:id="@+id/Invite"
            android:title="@string/NavInvite"
            android:icon="@mipmap/share_nav"
        />

        <item

            android:id="@+id/Partner"
            android:title="@string/NavPartner"
            android:icon="@drawable/partner_icon_smaller_version"
            />

        <item

            android:id="@+id/Sign_out"
            android:title="@string/Sign_out"
            android:icon="@mipmap/sign_out"
        />

        <item

            android:id="@+id/About_us"
            android:title="@string/about_us"
            android:icon="@drawable/info"
            />

    </group>

</menu>