Button.setClickable(false) is not working

前端 未结 11 2326
無奈伤痛
無奈伤痛 2021-01-02 02:19

I have set mButton.setClickable(false); in my code but still this button is invoked by global button.setOnClickListener of my code.

EDIT:

11条回答
  •  暗喜
    暗喜 (楼主)
    2021-01-02 03:03

    Like Other friends said, setOnClickListener will override the flag to true.
    So the Workaround is to setOnTouchEvent return true whenever you want to disable clicks and set it to retrun false when you want to enable click events.
    This is because onTouchEvent is called before every clickListener you define for a view, so returning true will say to all listeners that :

    "Ok, I received this event here, nobody else can receive it".

    So your solution may be something like this:

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View row = convertView;
        YourWrapper wrapper = null;
        HashMap cTa= new HashMap();
        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.setOnTouchListener((v, event) -> false);
            }
            else{
                       // section-2
                mButton.setOnTouchListener((v, event) -> true);
            }
        wrapper.getButton().setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //operation
            }
        });
        return row;
    }
    

提交回复
热议问题