Как отключить (затемнить) параметр в onItemLongClick из ListView в Android? - PullRequest
2 голосов
/ 27 сентября 2010

При нажатии элемента в моем ListView у меня появляется несколько вариантов в диалоговом окне, чтобы пользователь мог выбрать. Однако существуют различные сценарии, в которых я хотел бы отключить один или несколько параметров, чтобы пользователь не мог их выбрать. Вот некоторый код.

public class MyApp extends ListActivity implements OnItemClickListener, OnItemLongClickListener {

private static final int HOW_MANY = 4;
private static final int ADD = 0;
private static final int EDIT = 1;
private static final int OPEN = 2;
private static final int DELETE = 3;

private String[] myItemClickDialog = null;
...

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    setContentView(R.layout.mylayout);


    this.myItemClickDialog = new String[HOW_MANY];
    this.myItemClickDialog[ADD] = "Add";
    this.myItemClickDialog[EDIT] = "Edit";
    this.myItemClickDialog[OPEN] = "Open";
    this.myItemClickDialog[DELETE] = "Delete";
}

@Override
public final boolean onItemLongClick(final AdapterView<?> parent,
    final View view, final int position, final long id) {

    final Context context = this;
    Builder builder = new Builder(context);
    builder.setTitle("Options");

    String[] items = this.myItemClickDialog;
    builder.setItems(items, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(final DialogInterface dialog, final int which) {
            switch (which) {
                case ADD:
                    //Do stuff
                    break;
                case EDIT:
                    //Do stuff
                    break;
                case OPEN:
                    //Do stuff
                    break;
                case DELETE:
                    //Do stuff
                    break;
            }
        }
// Rest of code here

Я бы хотел иметь возможность отключить (затемняя) конкретную опцию, например опцию DELETE или опцию OPEN, в зависимости от того, какой элемент списка был нажат (я покрыл эту часть, то есть часть обнаружения).

1 Ответ

0 голосов
/ 01 октября 2010

К сожалению, это не представляется возможным.Система AlertDialog.Builder не учла это в своих настройках.Я посмотрел исходный код createListView , чтобы убедиться в этом.

Я полагаю, вы рассматривали более простой подход - просто не показывать эти параметры?То есть создать копию массива только с действительными строками в данный момент?

...