16

コードに設定mButton.setClickable(false);しましたが、それでもこのボタンはbutton.setOnClickListenerコードのグローバルによって呼び出されます。

編集:更新が遅れて申し訳ありません。以下は、私が問題に直面している詳細ビューです。
リストビュー 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 とフォーカス可能 - false になりますが、それでも以下の wrapper.getButton().setOnClickListener() をリッスンして操作を実行します。私に提案してください。更新が遅くなり申し訳ありません。ありがとう!

更新:現在のところ、問題を解決する以下のホットフィックスを作成しました。

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

13 に答える 13

0

他の友人が言ったように、setOnClickListener はフラグを true にオーバーライドします。したがって、回避策は、クリックを無効にするときはいつでも
OnTouchEventを設定し、クリック イベントを有効にするときに設定することです。これは、ビューに対して定義するすべての clickListener の前に onTouchEvent が呼び出されるためです。したがって、true を返すと、すべてのリスナーに次のことが伝えられます。return trueretrun false

「わかりました、私はここでこのイベントを受け取りました。他の誰もそれを受け取ることはできません」.

したがって、ソリューションは次のようになります。

@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.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;
}
于 2019-11-12T14:11:22.113 に答える
0

xmlで

アンドロイド:有効な="false"

アンドロイド:アルファ = "0.5"

動的に

yourButtonId.alpha = 0.5f

yourButtonId.isEnabled = false

于 2021-07-01T13:19:59.887 に答える