Android:Button的OnClick方法没有响应

时间:2015-11-17 10:48:04

标签: android

直到现在我还没有遇到这个问题。我不知道这里的问题是什么,因为在相同的布局中我有几个按钮,只有LinearLayout中的按钮不会响应。

这是我的按钮无法响应的布局点击(已编辑)

    <?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollView1"
    android:background="@drawable/texture"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="600dp"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin">

        <EditText
            android:id="@+id/input_first_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:ems="10"
            android:inputType="text"
            android:textSize="@dimen/text_size">

            <requestFocus />
        </EditText>

        <EditText
            android:id="@+id/input_last_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/input_first_name"
            android:ems="10"
            android:inputType="text"
            android:textSize="@dimen/text_size" />

        <EditText
            android:id="@+id/input_age"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/input_last_name"
            android:ems="10"
            android:inputType="number"
            android:textSize="@dimen/text_size" />

        <ImageView
            android:id="@+id/profile_image"
            android:layout_width="140dp"
            android:layout_height="140dp"
            android:layout_below="@+id/input_age"
            android:layout_centerHorizontal="true"
            android:src="@drawable/add" />

        <Button
            android:id="@+id/save_button"
            style="@style/MyCustomButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_below="@+id/slider"
            android:layout_toLeftOf="@+id/edit_button"
            android:onClick="run"
            android:text="@string/save_button" />

        <Button
            android:id="@+id/edit_button"
            style="@style/MyCustomButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/slider"
            android:text="@string/edit_button" />

        <Button
            android:id="@+id/delete_button"
            style="@style/MyCustomButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/slider"
            android:layout_toLeftOf="@+id/save_button"
            android:layout_toStartOf="@+id/save_button"
            android:text="@string/delete_button" />

        <Button
            android:id="@+id/edit_birthday_date"
            style="@style/MyCustomButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/profile_image"
            android:layout_centerHorizontal="true" />

        <LinearLayout
            android:id="@+id/button_container1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/cake_image"
            android:layout_marginTop="10dp"
            android:clickable="true"
            android:weightSum="3"
            android:orientation="horizontal">

            <Button
                android:id="@+id/button_movie"
                style="@style/MyCustomButton"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_weight="1" />

            <Button
                android:id="@+id/button_books"
                style="@style/MyCustomButton"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_weight="1"/>

            <Button
                android:id="@+id/button_tech"
                style="@style/MyCustomButton"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_weight="1"/>

        </LinearLayout>

        <LinearLayout
            android:id="@+id/button_container2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/button_container1"
            android:layout_marginTop="10dp"
            android:orientation="horizontal"
            android:weightSum="3"
            android:clickable="true">

            <Button
                android:id="@+id/button_body_care"
                style="@style/MyCustomButton"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_weight="1"/>

            <Button
                android:id="@+id/button_clothes"
                style="@style/MyCustomButton"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_weight="1" />

            <Button
                android:id="@+id/button_accessories"
                style="@style/MyCustomButton"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_weight="1"/>

        </LinearLayout>

        <LinearLayout
            android:id="@+id/button_container3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/button_container2"
            android:layout_marginTop="10dp"
            android:clickable="true"
            android:orientation="horizontal">

            <Button
                android:id="@+id/button_games"
                style="@style/MyCustomButton"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignEnd="@+id/edit_button"
                android:layout_alignTop="@+id/slider"
                android:layout_gravity="center_horizontal"/>

        </LinearLayout>

        <ImageView
            android:id="@+id/cake_image"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignStart="@+id/edit_birthday_date"
            android:layout_below="@+id/edit_birthday_date"
            android:layout_marginTop="20dp"
            android:src="@drawable/birthday_cake" />

        <TextView
            android:id="@+id/turning_age"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/cake_image"
            android:layout_toEndOf="@+id/cake_image"
            android:text="Large Text"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <com.daimajia.slider.library.SliderLayout
            android:id="@+id/slider"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:layout_below="@+id/cake_image" />

    </RelativeLayout>
</ScrollView>

当一个正在工作的按钮被点击可见时,我为每个线性布局可见性设置了,所以我认为这不是问题。

这是java中的代码:

if (getMovieCategory.equals("movies")) {
            buttonCategoryMovie.setText("MOVIES");
            buttonCategoryMovie.setTextColor(Color.parseColor("#ffffff"));
            buttonCategoryMovie.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_cancelar, 0, 0, 0);
            buttonCategoryMovie.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String movies = "movies";
                    dbh.updateCategoryMovies(birthdayId, movies);
                }
            });
        } else {
            buttonCategoryMovie.setText("MOVIES");
            buttonCategoryMovie.setTextColor(Color.parseColor("#ffffff"));
            buttonCategoryMovie.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_add, 0, 0, 0);
            buttonCategoryMovie.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dbh.deleteMovies(getMovieCategory);
                }
            });
        }

除了onClick之外,一切正常。我没有错误。我的按钮在点击时没有响应。

3 个答案:

答案 0 :(得分:2)

尝试将ifOnClickListener处理出if条件。

答案 1 :(得分:1)

尝试在LinearLayout中将android:visibility="gone"更改为android:visibility="visible"

再次将android:clickable="true"添加到您的LinearLayout

答案 2 :(得分:1)

。您需要使用大量冗余进行编码,并冒着引入错误的风险,其中一些可能不会立即显现出来。这是您发布的代码示例的更精简和更清晰的版本,使用一个onClick方法来处理您的if(){else}条件。

buttonCategoryMovie.setText("MOVIES");
buttonCategoryMovie.setTextColor(Color.parseColor("#ffffff"));

buttonCategoryMovie.setCompoundDrawablesWithIntrinsicBounds(
    getMovieCategory.equals("movies") ? R.drawable.ic_cancelar : R.drawable.ic_add, 0,0,0
);

buttonCategoryMovie.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (getMovieCategory.equals("movies")) {
            String movies = "movies";
            dbh.updateCategoryMovies(birthdayId, movies);
        } else {
            dbh.deleteMovies(getMovieCategory);
        }
    }
});

编辑1:我错误地遗漏了您的String movies = "movies"并重新添加了。如果您只使用此字符串一次,则将其作为参数传递对于dbh.updateCategoryMovies(birthdayId, movies),您只需拨打dbh.updateCategoryMovies(birthdayId, "movies")并删除String movies = "movies"

即可

编辑2 :如果您没有看到完整的源代码,我就不知道您是否在某处更改getMovieCategory的值。如果没有,那么下面的示例将在每次单击按钮时更改它(一旦您启动应用程序来测试示例,您的buttonCategoryMovie将是一个通用按钮;一旦您开始单击该按钮,它应该在显示您的R.drawable.ic_cancelarR.drawable.ic_add资源。如果按钮在这两个drawable之间切换,那么您至少知道该按钮实际上正在接收onClick。

请注意,如果getMovieCategory的值在每次点击时都没有变化,那么您的按钮将始终只执行其中一组onClick操作,并且它看起来就像什么都没有一样?&#39;发生了。

如果它像我所描述的那样适合你,那么你就在路上;)

buttonCategoryMovie.setText("MOVIES");
buttonCategoryMovie.setTextColor(Color.parseColor("#ffffff"));

buttonCategoryMovie.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (getMovieCategory.equals("movies")) {
            getMoviesCategory = "not movies"; // this is here just to test
            buttonCategoryMovie.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_cancelar, 0, 0, 0);
            String movies = "movies";
            dbh.updateCategoryMovies(birthdayId, movies);
        } else {
            getMoviesCategory = "movies"; // this is here just to test
            buttonCategoryMovie.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_add, 0, 0, 0);
            dbh.deleteMovies(getMovieCategory);
        }
    }
});