android OnclickListener不适用于ImageButton和ImageView

时间:2016-12-19 17:52:57

标签: android android-layout android-fragments

我在一个片段中有两个ImageButton(id next_btn和previous_btn),它具有以下布局 -

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.geniusesafrica.geniuses.activities.StudyKitActivity">

<RelativeLayout
    android:id="@+id/top"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingEnd="16dp"
    android:paddingStart="16dp"
    android:paddingTop="8dp"
    android:paddingBottom="8dp"
    android:elevation="2dp"
    android:orientation="horizontal"
    android:background="@color/colorPrimary">

    <de.hdodenhof.circleimageview.CircleImageView
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:id="@+id/subject_image"
        android:layout_marginEnd="5dp"
        android:src="@drawable/commerce_white"
        android:layout_centerVertical="true"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/subject_name"
        android:layout_centerVertical="true"
        android:textColor="@color/textColorPrimary"
        android:textSize="18sp"
        android:text="Commerce"
        android:layout_toEndOf="@+id/subject_image"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/time"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:textColor="@color/textColorPrimary"
        android:textSize="18sp"
        android:text="00:00"/>

</RelativeLayout>

<RelativeLayout
    android:id="@+id/top_two"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingEnd="16dp"
    android:paddingStart="16dp"
    android:paddingTop="5dp"
    android:layout_marginBottom="10dp"
    android:layout_below="@+id/top"
    android:orientation="horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/question_info"
        android:textColor="@color/navigationBarColor"
        android:textSize="14sp"
        android:layout_marginTop="11dp"
        android:fontFamily="sans-serif"
        android:text="QUESTION"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/current_question_text"
        android:textColor="@color/navigationBarColor"
        android:textSize="14sp"
        android:fontFamily="sans-serif"
        android:layout_marginStart="7dp"
        android:layout_below="@+id/question_info"
        android:text="17 of 50"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginEnd="10dp"
        android:layout_toStartOf="@+id/pause_btn_holder"
        android:padding="3dp"
        android:id="@+id/goto_btn_holder"
        android:orientation="vertical">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:srcCompat="@drawable/ic_redo_black_24dp"
            android:background="@android:color/transparent"
            android:layout_gravity="center"
            android:id="@+id/goto_btn"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="13sp"
            android:fontFamily="sans-serif"
            android:text="go to"
            android:textAllCaps="true"
            android:textAlignment="center"
            android:layout_gravity="center"
            android:textColor="@android:color/black"
            android:background="@android:color/transparent"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:padding="3dp"
        android:id="@+id/pause_btn_holder"
        android:orientation="vertical">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:srcCompat="@drawable/ic_pause_circle_outline_black_24dp"
            android:background="@android:color/transparent"
            android:layout_gravity="center"
            android:id="@+id/pause_btn"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="13sp"
            android:fontFamily="sans-serif"
            android:text="pause"
            android:textAllCaps="true"
            android:textAlignment="center"
            android:layout_gravity="center"
            android:textColor="@android:color/black"
            android:background="@android:color/transparent"/>

    </LinearLayout>

</RelativeLayout>

<RelativeLayout
    android:id="@+id/bottom"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingEnd="16dp"
    android:paddingStart="16dp"
    android:paddingTop="8dp"
    android:paddingBottom="8dp"
    android:layout_alignParentBottom="true"
    android:focusable="true"
    android:clickable="true"
    android:background="@color/colorAccent"
    android:orientation="horizontal">

    **this button**
    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/ic_arrow_back_black_24dp"
        android:background="@android:color/transparent"
        android:layout_alignParentStart="true"
        android:layout_gravity="center"
        android:layout_marginStart="17dp"
        android:clickable="true"
        android:focusableInTouchMode="true"
        android:focusable="true"
        android:id="@+id/previous_btn"
        android:contentDescription="previous button" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="13sp"
        android:fontFamily="sans-serif"
        android:text="previous"
        android:textAllCaps="true"
        android:textAlignment="center"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/previous_btn"
        android:layout_gravity="center"
        android:textColor="@color/textColorPrimary"
        android:background="@android:color/transparent"/>

    **and this button**
    <ImageButton
        android:layout_width="25dp"
        android:layout_height="32dp"
        app:srcCompat="@drawable/ic_arrow_forward_black_24dp"
        android:background="@android:color/transparent"
        android:layout_alignParentEnd="true"
        android:layout_gravity="center"
        android:layout_marginEnd="10dp"
        android:padding="3dp"
        android:clickable="true"
        android:focusable="true"
        android:id="@+id/next_btn"
        android:contentDescription="next button" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="13sp"
        android:fontFamily="sans-serif"
        android:text="next"
        android:textAllCaps="true"
        android:layout_alignParentEnd="true"
        android:textAlignment="center"
        android:layout_gravity="center"
        android:textColor="@color/textColorPrimary"
        android:clickable="true"
        android:focusable="true"
        android:background="@android:color/transparent"
        android:id="@+id/next_textView"
        android:layout_below="@+id/next_btn"/>

</RelativeLayout>

<ScrollView
    android:id="@+id/middle"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/top_two"
    android:layout_alignParentStart="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/questionView"
            android:textSize="15sp"
            android:paddingStart="16dp"
            android:paddingEnd="16dp"
            android:layout_marginBottom="8dp"
            android:textColor="@color/navigationBarColor"
            android:layout_gravity="center"
            android:textAlignment="center"/>

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/question_imageView"
            android:layout_gravity="center"
            android:paddingStart="16dp"
            android:paddingEnd="16dp"
            android:layout_marginBottom="8dp"/>

        <RadioGroup
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:paddingStart="16dp"
            android:paddingEnd="16dp"
            android:layout_marginBottom="8dp">

            <android.support.v7.widget.AppCompatRadioButton
                android:id="@+id/a_option"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="option A"
                android:fontFamily="sans-serif"
                android:textColor="@android:color/black"
                android:layout_marginBottom="3dp"
                android:layout_marginTop="3dp"/>

            <android.support.v7.widget.AppCompatRadioButton
                android:id="@+id/b_option"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="option B"
                android:fontFamily="sans-serif"
                android:textColor="@android:color/black"
                android:layout_marginBottom="3dp"
                android:layout_marginTop="3dp"/>

            <android.support.v7.widget.AppCompatRadioButton
                android:id="@+id/c_option"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="option C"
                android:fontFamily="sans-serif"
                android:textColor="@android:color/black"
                android:layout_marginBottom="3dp"
                android:layout_marginTop="3dp"/>

            <android.support.v7.widget.AppCompatRadioButton
                android:id="@+id/d_option"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="option D"
                android:fontFamily="sans-serif"
                android:textColor="@android:color/black"
                android:layout_marginBottom="3dp"
                android:layout_marginTop="3dp"/>

        </RadioGroup>

    </LinearLayout>

</ScrollView>

<android.support.v7.widget.AppCompatImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/imageView"
    android:layout_gravity="center"
    android:maxHeight="300dp"
    android:layout_below="@+id/top_two"
    android:layout_alignParentStart="true"
    android:layout_marginTop="36dp" />

片段就是这样 -

 public class StudyKitExamFragment extends Fragment implements View.OnClickListener {     

 private ImageButton next_btn,previous_btn;
 private ImageView question_imageView, imageView, goto_btn, pause_btn;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    View view = inflater.inflate(R.layout.study_kit_exam_layout, container, false);
      goto_btn = (ImageView) view.findViewById(R.id.goto_btn);
      previous_btn = (ImageView) view.findViewById(R.id.previous_btn);
      pause_btn = (ImageView) view.findViewById(R.id.pause_btn);
      next_btn = (ImageButton) view.findViewById(R.id.next_btn);

    previous_btn.setOnClickListener(this);

    next_btn.setClickable(true);

    pause_btn.setOnClickListener(this);

    goto_btn.setOnClickListener(this);
 }


@Override
public void onClick(View view) {
        switch(view.getId()){

            case R.id.next_btn:
                Log.e("ExamFrgment", "pressed");
                if(current_question_number<(all_questions.size()-1)){
                    current_question_number++;
                    showQuestion();
                }
                break;

            case R.id.previous_btn:
                Log.e("ExamFrgment", "pressed previous");
                break;
            case R.id.pause_btn:
                Log.e("ExamFrgment", "pressed pause");
                break;
            case R.id.goto_btn:
                Log.e("ExamFrgment", "pressed goto");
                break;
         }
  }

}

因此当我在API 21和19上运行时,单击不在ImageButtons上,因为那些是我正在测试的API,我之前有过ImageView(id next_btn和previous_btn),但它们仍然无效。 ...我可以看到按钮但是当我点击没有任何反应并且没有记录任何错误(我不希望有任何错误)。

奇怪的是,点击它们时,同一布局中的ImageButtons(id pause_btn和id goto_btn)上方的两个ImageView工作。

如果需要,我可以提供更多细节。

2 个答案:

答案 0 :(得分:1)

您将整个RelativeLayout@id/bottom)与ScrollView重叠。要么避免重叠,要么将RelativeLayout移动到布局XML的末尾,使其成为以下所有内容的首选:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.geniusesafrica.geniuses.activities.StudyKitActivity">

    <RelativeLayout
        android:id="@+id/top"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingEnd="16dp"
        android:paddingStart="16dp"
        android:paddingTop="8dp"
        android:paddingBottom="8dp"
        android:elevation="2dp"
        android:orientation="horizontal"
        android:background="@color/colorPrimary">

        <de.hdodenhof.circleimageview.CircleImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:id="@+id/subject_image"
            android:layout_marginEnd="5dp"
            android:src="@drawable/commerce_white"
            android:layout_centerVertical="true"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/subject_name"
            android:layout_centerVertical="true"
            android:textColor="@color/textColorPrimary"
            android:textSize="18sp"
            android:text="Commerce"
            android:layout_toEndOf="@+id/subject_image"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/time"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:textColor="@color/textColorPrimary"
            android:textSize="18sp"
            android:text="00:00"/>

    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/top_two"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingEnd="16dp"
        android:paddingStart="16dp"
        android:paddingTop="5dp"
        android:layout_marginBottom="10dp"
        android:layout_below="@+id/top"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/question_info"
            android:textColor="@color/navigationBarColor"
            android:textSize="14sp"
            android:layout_marginTop="11dp"
            android:fontFamily="sans-serif"
            android:text="QUESTION"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/current_question_text"
            android:textColor="@color/navigationBarColor"
            android:textSize="14sp"
            android:fontFamily="sans-serif"
            android:layout_marginStart="7dp"
            android:layout_below="@+id/question_info"
            android:text="17 of 50"/>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginEnd="10dp"
            android:layout_toStartOf="@+id/pause_btn_holder"
            android:padding="3dp"
            android:id="@+id/goto_btn_holder"
            android:orientation="vertical">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:srcCompat="@drawable/ic_redo_black_24dp"
                android:background="@android:color/transparent"
                android:layout_gravity="center"
                android:id="@+id/goto_btn"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="13sp"
                android:fontFamily="sans-serif"
                android:text="go to"
                android:textAllCaps="true"
                android:textAlignment="center"
                android:layout_gravity="center"
                android:textColor="@android:color/black"
                android:background="@android:color/transparent"/>

        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:padding="3dp"
            android:id="@+id/pause_btn_holder"
            android:orientation="vertical">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:srcCompat="@drawable/ic_pause_circle_outline_black_24dp"
                android:background="@android:color/transparent"
                android:layout_gravity="center"
                android:id="@+id/pause_btn"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="13sp"
                android:fontFamily="sans-serif"
                android:text="pause"
                android:textAllCaps="true"
                android:textAlignment="center"
                android:layout_gravity="center"
                android:textColor="@android:color/black"
                android:background="@android:color/transparent"/>

        </LinearLayout>

    </RelativeLayout>

    <ScrollView
        android:id="@+id/middle"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/top_two"
        android:layout_alignParentStart="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/questionView"
                android:textSize="15sp"
                android:paddingStart="16dp"
                android:paddingEnd="16dp"
                android:layout_marginBottom="8dp"
                android:textColor="@color/navigationBarColor"
                android:layout_gravity="center"
                android:textAlignment="center"/>

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/question_imageView"
                android:layout_gravity="center"
                android:paddingStart="16dp"
                android:paddingEnd="16dp"
                android:layout_marginBottom="8dp"/>

            <RadioGroup
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:paddingStart="16dp"
                android:paddingEnd="16dp"
                android:layout_marginBottom="8dp">

                <android.support.v7.widget.AppCompatRadioButton
                    android:id="@+id/a_option"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="option A"
                    android:fontFamily="sans-serif"
                    android:textColor="@android:color/black"
                    android:layout_marginBottom="3dp"
                    android:layout_marginTop="3dp"/>

                <android.support.v7.widget.AppCompatRadioButton
                    android:id="@+id/b_option"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="option B"
                    android:fontFamily="sans-serif"
                    android:textColor="@android:color/black"
                    android:layout_marginBottom="3dp"
                    android:layout_marginTop="3dp"/>

                <android.support.v7.widget.AppCompatRadioButton
                    android:id="@+id/c_option"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="option C"
                    android:fontFamily="sans-serif"
                    android:textColor="@android:color/black"
                    android:layout_marginBottom="3dp"
                    android:layout_marginTop="3dp"/>

                <android.support.v7.widget.AppCompatRadioButton
                    android:id="@+id/d_option"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="option D"
                    android:fontFamily="sans-serif"
                    android:textColor="@android:color/black"
                    android:layout_marginBottom="3dp"
                    android:layout_marginTop="3dp"/>

            </RadioGroup>

        </LinearLayout>

    </ScrollView>

    <RelativeLayout
        android:id="@+id/bottom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingEnd="16dp"
        android:paddingStart="16dp"
        android:paddingTop="8dp"
        android:paddingBottom="8dp"
        android:layout_alignParentBottom="true"
        android:focusable="true"
        android:clickable="true"
        android:background="@color/colorAccent"
        android:orientation="horizontal">

        **this button**
        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:srcCompat="@drawable/ic_arrow_back_black_24dp"
            android:background="@android:color/transparent"
            android:layout_alignParentStart="true"
            android:layout_gravity="center"
            android:layout_marginStart="17dp"
            android:clickable="true"
            android:focusableInTouchMode="true"
            android:focusable="true"
            android:id="@+id/previous_btn"
            android:contentDescription="previous button" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="13sp"
            android:fontFamily="sans-serif"
            android:text="previous"
            android:textAllCaps="true"
            android:textAlignment="center"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/previous_btn"
            android:layout_gravity="center"
            android:textColor="@color/textColorPrimary"
            android:background="@android:color/transparent"/>

        **and this button**
        <ImageButton
            android:layout_width="25dp"
            android:layout_height="32dp"
            app:srcCompat="@drawable/ic_arrow_forward_black_24dp"
            android:background="@android:color/transparent"
            android:layout_alignParentEnd="true"
            android:layout_gravity="center"
            android:layout_marginEnd="10dp"
            android:padding="3dp"
            android:clickable="true"
            android:focusable="true"
            android:id="@+id/next_btn"
            android:contentDescription="next button" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="13sp"
            android:fontFamily="sans-serif"
            android:text="next"
            android:textAllCaps="true"
            android:layout_alignParentEnd="true"
            android:textAlignment="center"
            android:layout_gravity="center"
            android:textColor="@color/textColorPrimary"
            android:clickable="true"
            android:focusable="true"
            android:background="@android:color/transparent"
            android:id="@+id/next_textView"
            android:layout_below="@+id/next_btn"/>

    </RelativeLayout>

    <android.support.v7.widget.AppCompatImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/imageView"
        android:layout_gravity="center"
        android:maxHeight="300dp"
        android:layout_below="@+id/top_two"
        android:layout_alignParentStart="true"
        android:layout_marginTop="36dp" />

</RelativeLayout>

答案 1 :(得分:0)

将您的滚动视图更改为:

<ScrollView
    android:id="@+id/middle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/top_two"
    android:layout_alignParentStart="true">

并将包含按钮的RelativeLout更改为:

<RelativeLayout
    android:id="@+id/bottom"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingEnd="16dp"
    android:paddingStart="16dp"
    android:paddingTop="8dp"
    android:paddingBottom="8dp"
    android:layout_alignParentBottom="true"
    android:background="@color/colorAccent"
    android:orientation="horizontal">