Android 复选框OnLongClick行为

Android 复选框OnLongClick行为,android,checkbox,Android,Checkbox,我有一个垂直排列的项目列表。每个项目都有一个复选框和一个文本视图。 我正在尝试实现复选框的长单击行为。更确切地说,我希望它在长时间单击时使用垃圾图标进行更改。在发布时,它必须再次成为复选框,并在简单单击时保持选中/取消选中行为 我怎样才能做到这一点?有多少种方法? 我希望任何国王都能帮忙 我试图只使用setBackgroud()函数,但它只会在现有的复选框视图下绘制,而复选框仍然保留在顶部 cb.setOnLongClickListener(new View.OnLongClickListen

我有一个垂直排列的项目列表。每个项目都有一个复选框和一个文本视图。 我正在尝试实现复选框的长单击行为。更确切地说,我希望它在长时间单击时使用垃圾图标进行更改。在发布时,它必须再次成为复选框,并在简单单击时保持选中/取消选中行为

我怎样才能做到这一点?有多少种方法? 我希望任何国王都能帮忙


我试图只使用setBackgroud()函数,但它只会在现有的复选框视图下绘制,而复选框仍然保留在顶部

cb.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                Resources res = tmp_context.getResources();
                Drawable drawable = res.getDrawable(R.mipmap.ic_trash);
                cb.setBackground(drawable);
                return false;
            }
        });

更新

首先将复选框放入框架布局中:

<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/one"
    android:id="@+id/fl">
    <CheckBox

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Two"
        android:longClickable="true"
        android:id="@+id/two"/>
</FrameLayout>
在您的内部onCreate():

还加

android:longClickable="true"

到您的复选框xml。

更新

首先将复选框放入框架布局中:

<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/one"
    android:id="@+id/fl">
    <CheckBox

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Two"
        android:longClickable="true"
        android:id="@+id/two"/>
</FrameLayout>
在您的内部onCreate():

还加

android:longClickable="true"

到您的复选框xml。

@Obsuregeek我试图使用setBackgroud(),但复选框图像保持在顶部,因为我只是在下面绘制。@Obsuregeek我试图使用setBackgroud(),但复选框图像保持在顶部,因为我只是在下面绘制。@Akihil Soman谢谢,但setBackgroundResource仍然只设置复选框的背景。而复选框在顶部保持不变。您可以将复选框放在framelayout中,然后在长时间单击期间,将背景设置为framelayout并使复选框不可见。释放时,将framelayout的背景设置为null,并使复选框可见。我已经更新了我的代码,请检查。Soaman谢谢你,它可以工作了!但是我产生了一个bug。我在复选框上还有一个setOnCheckedChangeListener,当按下复选框时,onCheckedChanged被调用2次。因此,它可以在一次单击中选中和取消选中。你知道如何解决这个错误吗?不管它如何工作,我只需要在onTouch方法中返回true@Akihil Soman谢谢你,但是setBackgroundResource仍然只会设置复选框的背景。而复选框在顶部保持不变。您可以将复选框放在framelayout中,然后在长时间单击期间,将背景设置为framelayout并使复选框不可见。释放时,将framelayout的背景设置为null,并使复选框可见。我已经更新了我的代码,请检查。Soaman谢谢你,它可以工作了!但是我产生了一个bug。我在复选框上还有一个setOnCheckedChangeListener,当按下复选框时,onCheckedChanged被调用2次。因此,它可以在一次单击中选中和取消选中。你知道如何解决这个错误吗?不管它如何工作,我只需要在onTouch方法中返回true!