4

動的に無効にしてクリックリスナーに関連付けることができるチェックボックスがあります。

CheckBox chkbox = (CheckBox)findViewById(R.id.chkboxid);

if(condition) {
     chkbox.setEnabled(false);
     chkbox.setOnClickListener(displayPopup);
} else {
     chkbox.setOnClickListener(handleToggle);
}

これの目的は、チェックボックスが無効になっている場合に、チェックボックスをクリックしたユーザーに、オプションが無効になっている理由に関する詳細情報を提供することです。

その後、無効化されたウィジェットはクリック イベントをクリック リスナーに送信しないことに気付きました。それ以来LinearLayout、次のようにして、存在するものをクリック可能に設定しようとしました。

CheckBox chkbox = (CheckBox)findViewById(R.id.checkboxName);
LinearLayout layout = (LinearLayout)findViewById(R.id.layoutName);
if(condition) {
     chkbox.setEnabled(false);
     layout.setClickable(true);
     layout.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
     layout.setOnClickListener(displayPopup);
} else {
     chkbox.setOnClickListener(handleToggle);
}

LinearLayoutこれは、無効化されたチェックボックス以外の任意の場所をクリックすると機能します。設定に従っていませんFOCUS_BLOCK_DESCENDANTS。チェックボックスの上に非表示のクリック可能なオブジェクトを配置しようとしましたが、そこでも成功しませんでした。何か案は?

編集: 現在、API レベル 8 で立ち往生しています。そうでない場合は、チェックボックスを無効にする代わりに、チェックボックスのアルファを下げて、少なくとも無効になっているように見えるようにします。

4

2 に答える 2

4

Android: 無効化されたチェックボックスがクリック イベントに応答しない

CheckBoxまたは他のタイプのウィジェットが無効になっていると、1つのイベントを処理できないと思います。

しかし、簡単なトリックを作るにはどうすればよいでしょうか。有効CheckBoxにして、必要なものが満たされていない場合は、チェック済みの状態を常に false に設定します。「チェックボックスにチェックを入れることができません。何か問題がありますと表示され、Toast を介して警告メッセージが表示されます。

checkBox.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (somethingIsNotFilledUp) {
            checkBox.setChecked(false);
            Toast.makeText(Main.this, "You didn't fill required fields", Toast.LENGTH_SHORT).show();
        }
        else {
            // do some stuff
        }
    }
});

違いを見てもらいたい

カスタム定義のチェックボックスの外観を使用して実現できます。

于 2013-03-20T22:09:20.383 に答える