2

ListView 内の項目をクリックすると、ユーザーが選択できるダイアログにいくつかのオプションがポップアップ表示されます。ただし、1 つまたは複数のオプションを無効にしてユーザーが選択できないようにするさまざまなシナリオがあります。ここにいくつかのコードがあります。

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 オプションなどの特定のオプションを (淡色表示で) 無効にできるようにしたいと考えています (その部分、つまり検出ピースをカバーしました)。

4

1 に答える 1

0

残念ながら、これは不可能のようです。AlertDialog.Builderシステムは、カスタマイズオプションでこれを考慮していません。これを確認するために、 createListViewのソースコードを調べました。

これらのオプションを表示しないという、より単純なアプローチを検討したと思いますか?つまり、その特定の時点で有効な文字列のみを使用して配列のコピーを作成しますか?

于 2010-10-01T08:11:40.773 に答える