android - 警报对话框中禁用的列表项不会显示为灰色项目

标签 android android-layout android-listview android-alertdialog android-dialog

这是我的场景。

我有一个 Activity ,我必须在其中显示一个对话框(这是一个带有两个选项 OptionA 和 OptionB 的 ListView )。 我使用的 ListView 处于单选模式。但有时选项A被禁用(不允许用户选择选项A)

这些是我的代码 fragment

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。 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;
    }
}

现在一切正常,但是当选项A被禁用时,它的行为是禁用的,但看起来像是启用的,它不会变灰。 有什么想法吗?

最佳答案

您需要做的就是替换以下代码:

    @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;
   }

关于android - 警报对话框中禁用的列表项不会显示为灰色项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11300381/

相关文章:

android - 即使操作系统终止应用程序,如何在android中保存/恢复全局变量

android - 在 android 布局文件中注释

android - 应用程序 :layout_scrollFlags ="scroll|enterAlways" doesn't works with LinearLayout

android - 对话框中的 setOnItemClickListener 不起作用

android - 登录然后 ListView 的基本方法

android - 缩放已在 android 上缩放的分层图像

android - 创建自定义进度条

android - Android Studio 中不存在视频 ID 时 Youtube API 崩溃

android - 如何在 Exoplayer 通知中设置自定义布局和字体?

android - 为什么 getListView().getChildAt() 方法在填充的 ListView 中返回 null?