Button.setClickable(false)无效

问题描述 投票:7回答:6

我已经在我的代码中设置了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);
android android-listview
6个回答
39
投票

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

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


23
投票

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


3
投票

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

button.setFocusableInTouchMode(false);

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


1
投票

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


0
投票

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


0
投票

这将适用于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()的状态改变)。

© www.soinside.com 2019 - 2024. All rights reserved.