Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在android Studio中单击没有android:OnClick的TextView时触发OnClick事件?_Android - Fatal编程技术网

为什么在android Studio中单击没有android:OnClick的TextView时触发OnClick事件?

为什么在android Studio中单击没有android:OnClick的TextView时触发OnClick事件?,android,Android,下面的代码来自项目架构示例,您可以看到它 LinearLayout有一个android:onClick事件,而TextView控件没有android:onClick事件 我认为当我单击左侧sapce而不是复选框或文本视图控件时,将触发OnClick事件。但事实上,当我单击TextView时,会触发OnClick事件,为什么 顺便说一句,当我点击复选框时,OnClick事件不会被触发 task_item.xml <layout xmlns:android="http://schemas.an

下面的代码来自项目架构示例,您可以看到它

LinearLayout
有一个
android:onClick
事件,而
TextView
控件没有
android:onClick
事件

我认为当我单击左侧sapce而不是
复选框
文本视图
控件时,将触发
OnClick
事件。但事实上,当我单击
TextView
时,会触发
OnClick
事件,为什么

顺便说一句,当我点击
复选框时,
OnClick
事件不会被触发

task_item.xml

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>

        <import type="android.widget.CompoundButton" />

        <variable
            name="task"
            type="com.example.android.architecture.blueprints.todoapp.data.Task" />

        <variable
            name="viewmodel"
            type="com.example.android.architecture.blueprints.todoapp.tasks.TasksViewModel" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:orientation="horizontal"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingBottom="@dimen/list_item_padding"
        android:paddingTop="@dimen/list_item_padding"
        android:onClick="@{()-> viewmodel.openTask(task.id)}">

        <CheckBox
            android:id="@+id/complete_checkbox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:onClick="@{(view) -> viewmodel.completeTask(task, ((CompoundButton)view).isChecked())}"
            android:checked="@{task.completed}" />

        <TextView
            android:id="@+id/title_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="@dimen/activity_horizontal_margin"
            android:layout_marginStart="@dimen/activity_horizontal_margin"
            android:textAppearance="@style/TextAppearance.AppCompat.Title"
            android:text="@{task.titleForList}"
            app:completedTask="@{task.completed}" />
    </LinearLayout>
</layout>

默认情况下,视图具有
android:clickable=“false”
属性,除非给它们一个onClick侦听器,或者该属性被显式声明为
“true”


当您有重叠的视图,其中一个被单击,并且它有
android:clickable=“false”
,它将忽略单击事件,因此它下面没有忽略单击事件的任何视图都将处理单击。在您的情况下,如果单击TextView,它将忽略它,LinearLayout的onClick将触发。要防止这种行为,请将
android:clickable=“true”
android:focusable=“true”
添加到文本视图中。这将使它接受单击,但不执行任何操作,而不是将单击传递到它下面的视图。

所有未设置onClick的子项都将标记为“不可聚焦”,因此将使用fire onClick of parents来防止此行为,我建议您为title\u文本设置focusable and clickable=true