Button.setClickable(false)无效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Button.setClickable(false)无效相关的知识,希望对你有一定的参考价值。

我已经在我的代码中设置了mButton.setClickable(false);,但仍然是我的代码的全局button.setOnClickListener调用此按钮。

编辑:抱歉延迟更新。以下是我遇到问题的详细信息视图。 在我的listview中的customAdapter类getView方法

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    View row = convertView;
    YourWrapper wrapper = null;
    HashMap<String, Object> cTa= new HashMap<String, Object>();
    cTa= d.getPosition(position)
    Button mButton = (Button)convertView.findViewById(R.id.mBtn);
    if (row == null)
    {
        row = inflater.inflate(R.layout.layout, parent, false);
        wrapper = new YourWrapper (row);
        row.setTag(wrapper);
    }
    else
        wrapper = (YourWrapper) row.getTag();

     if(success)
        {
                    // section-1
            mButton.setClickable(true);
        }
        else{
                   // section-2
            mButton.setClickable(false);
            mButton.setFocusable(false);
        }
    wrapper.getButton().setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            //operation
        }
    });

    return row;
}

上面是当前正在运行的代码,在第2节它使mButton可单击 - 假,并且可聚焦 - 为false但仍然在监听下面的wrapper.getButton()。setOnClickListener()并执行操作。请建议我。抱歉延迟更新。谢谢!

更新:我现在做了以下解决问题的热门修复程序。

// section-2
mButton.setVisibility(View.GONE);
mButton.setClickable(false);
mButton.setFocusable(false);
答案

这似乎是设计上的。这来自View.setOnClickListener 方法的文档:

注册单击此视图时要调用的回调。如果此视图不可单击,则它将变为可单击。

另一答案

而不是使用setClickable(false)使用setEnabled(false)

另一答案

而不是使用setClickable(false)使用以下

button.setFocusableInTouchMode(false);

我在我的应用程序中遇到了同样的问题,我需要将按钮设置为在某些条件下不可点击。这对我有用。希望这可以帮助。

另一答案

View.setOnClickListener()之前使用View.setClickable(),或者setOnclickLisnter()方法将标志设置为true。

另一答案

您可以检查if(!view.isClickable())return;

另一答案

这将适用于Imageview和按钮。

 private OnClickListener onClickListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
        if (imageview.isEnabled()){
            //I have wrapped all code inside onClick() in this if condition
            //Your onClick() code will only execute if the imageview is enabled
            //Now we can use setEnabled() instead of setClickable() everywhere
        }}
    };

onCreate()内,你可以做setEnabled(false),相当于setClickable(false)

我们可以使用setEnabled()作为标记因为它的状态在调用click时不受影响(不像setClickable()的状态改变)。

以上是关于Button.setClickable(false)无效的主要内容,如果未能解决你的问题,请参考以下文章

android 如何设置按钮 不可点击

为啥 == false 评估为 false 而 [] == false 评估为 true?

为啥 false && (false)?false:true 返回 true

console.log(([])?true:false); console.log(([]==false?true:false)); console.log(({}==false)?true:fa

为啥“[False, True] 中的 not(True)”返回 False?

在js中,为啥!0是true,!!0是false,!1是false,!!1是true,!-1是false,!!-1是true