1

私は ArrayAdapter を使用して ListView を作成しています。項目を選択後、確認のY/Nダイアログを表示します。ユーザーの選択が否定的である場合、ユーザーは同じダイアログを表示する別の項目を選択できる必要があります。等々。

これが私のコードです:

lView.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(final AdapterView<?> parent, final View v, final int index, final long id) {


       Toast.makeText("Selected file"+ mFiles.get(index).getfileName(),
       Toast.LENGTH_SHORT).show();


       SelectedFile = mFiles.get(index);



          showDialog(DIALOG_CONFIRMIMPORT_ID);
       }
    });

奇妙なことに、「トースト」は毎回クリックされたアイテムを表示しますが、アクティビティが開始されてから最初に選択されたアイテムのみが「SelectedFile」に渡されます。別のアイテムを何回クリックしても、"SelectedFile" は常に同じ値、つまりこのコードの外で最初にクリックされたアイテムの値を想定します。

私のダイアログコードは次のとおりです。

Protected Dialog onCreateDialog(int id) {
switch(id) {
 case DIALOG_CONFIRMIMPORT_ID:
  {
  AlertDialog.Builder builder = new AlertDialog.Builder(this);
  String message = String.format(getString(R.string.importstudentfileconfirm),SelectedFile.getfileName());

  builder.setMessage(message)
  .setCancelable(false)
  .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
  public void onClick(DialogInterface dialog, int id) {
  //     Activity.this.finish();
  //     startActivity(new Intent(Activity.this, LOL.class));
  }
  })
 .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
  public void onClick(DialogInterface dialog, int id) {
 SelectedFile = null;
 dismissDialog(DIALOG_CONFIRMIMPORT_ID);
 mFiles.notifyAll();
 }
 });

 AlertDialog alert = builder.create();
 return alert;
 }
 }
  return null;
 }

助けてくれてありがとう!

4

1 に答える 1

1

これは、ダイアログが最初に作成されたときにのみ onCreateDialog メソッドが呼び出されるという事実と関係があると思います。そのため、最初にダイアログが表示されたときに、正しいファイル名が表示されます。

onCreateDialog が呼び出された後、onPrepareDialog(...) が呼び出されます。onPrepareDialog を使用すると、ダイアログが作成された後、表示される前にダイアログを変更できます。

DIALOG_CONFIRMIMPORT_ID ダイアログを表示するたびに、Android が新しいダイアログを作成するわけではないことに注意してください。毎回新しいダイアログをインスタンス化するのは、計算コストが高すぎます。代わりに、一度作成すると、onCreatDialog が呼び出され、続いて onPrepareDialog が呼び出されます。ダイアログが表示されるたびに、onPrepareDialog のみが呼び出されます。

Android デベロッパー サイトの次の記事をご覧ください。それは物事をかなり明確に説明します。

http://developer.android.com/guide/topics/ui/dialogs.html#ShowingADialog

したがって、ダイアログの表示間で変更されないものの初期化のためだけに onCreateDialog を使用してみてから、 onPrepareDialog メソッドを使用してダイアログの内容を動的に更新します (つまり、新しいファイル名を取得します)。

乾杯!

于 2010-10-27T22:49:50.433 に答える