这是我的情景。
我有一个活动,我必须在其中显示一个对话框(这是一个列表视图,有两个选项OptionA和OptionB)。 我使用的列表视图是单选模式。但有时禁用选项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这两个选项。 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被禁用时,它会被禁用但看起来已启用, NOT 会变灰。 有什么想法吗?
答案 0 :(得分: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;
}
答案 1 :(得分:-1)
@覆盖 public boolean isEnabled(int position){
if (position == 1)
return true;