2

これが私のシナリオです。

ダイアログ ボックス (オプション A とオプション B の 2 つのオプションを備えたリストビュー) を表示する必要があるアクティビティがあります。私が使用したリストビューは、単一選択モードです。ただし、オプション A が無効になっている場合があります (ユーザーはオプション A を選択できません)。

これらは私のコードフラグメントです

private void createDialog() {
    boolean disableOptionA = false;
    ...
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(getString(R.string.codec_title));

    ListView modeList = new ListView(this);
    final ArrayAdapter<CharSequence> modeAdapter = CustomMenuAdapter.createFromResource(this, R.array.codec_decoder,
            android.R.layout.simple_list_item_single_choice, disableOptionA);
    modeList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    modeList.setAdapter(modeAdapter);
    builder.setView(modeList);
    final Dialog dialog = builder.create();
...
}

codec_decoder 配列には、OptionA と OptionB の 2 つのオプションが含まれています。CustomMenuAdapter のコードは次のとおりです。

public class CustomMenuAdapter extends ArrayAdapter<CharSequence> {

    boolean disableOptionA = true;

    private CustomMenuAdapter(Context context, int textViewResId, CharSequence[] strings, boolean disableOptionA) {
        super(context, textViewResId, strings);
        this.disableOptionA = disableOptionA;
    }

    public static CustomMenuAdapter createFromResource(Context context, int textArrayResId, int textViewResId,
            boolean disableOptionA) {

        Resources resources = context.getResources();
        CharSequence[] strings = resources.getTextArray(textArrayResId);

        return new CustomMenuAdapter(context, textViewResId, strings, disableOptionA);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        view.setEnabled(isEnabled(position));
        return view;
    }

    @Override
    public boolean areAllItemsEnabled() {
        return false;
    }

    @Override
    public boolean isEnabled(int position) {
        if (position == 0) {
            if (disableOptionA) {
                return false;
            }
        }
        return true;
    }
}

現在はすべて正常に機能していますが、OptionA が無効になっていると、無効に動作しますが、有効に見えますが、グレー表示にはなりませ。何か案は?

4

2 に答える 2

3

次のコードを置き換えるだけです。

    @Override
    public boolean isEnabled(int position) {
    if (position == 0) {
        if (disableOptionA) {
            return false;
        }
     }
    return true;
   }

位置1のアイテムを無効にしたい場合:

     @Override
     public boolean isEnabled(int position) {

    if (position == 1)
        return true;

    return false;
   }
于 2017-05-17T11:09:19.567 に答える