0

ダイアログが閉じないように setOnShowListener() メソッドを設定したいので、次のように記述します。

public Dialog update_pop_up()
{
    final AlertDialog.Builder builder = new AlertDialog.Builder(UgJadwal.this);
    LayoutInflater inflater = UgJadwal.this.getLayoutInflater();
    View dialogView = inflater.inflate(R.layout.updatepopup, null);
    builder.setView(dialogView);
    builder.setIcon(R.drawable.update);
    builder.setTitle("Update schedule");

    builder.setPositiveButton(R.string.update, new DialogInterface.OnClickListener()
    {
        @Override
        public void onClick(DialogInterface dialog, int id)
        {

        }
    });

    builder.setNeutralButton(R.string.retrieve, new DialogInterface.OnClickListener()
    {
        @Override
        public void onClick(DialogInterface dialog, int id)
        {

        }
    });

    builder.setNegativeButton(R.string.cancel, null);
    return builder.create();

    builder.setOnShowListener(new DialogInterface.OnShowListener()
    {
        @Override
        public void onShow(DialogInterface dialog)
        {
            Button retrieve = builder.getButton(AlertDialog.BUTTON_NEUTRAL);
            retrieve.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    //do nothing;
                }
            });
        }
    });
}

少なくとも Eclipse によって 2 つのエラーが表示されます。最初のエラーはsetOnShowListener「メソッド setOnShowListener(new DialogInterface.OnShowListener(){}) は AlertDialog.Builder 型に対して未定義です」というエラーであり、もう 1 つはそのエラーですbuilder.getButton(AlertDialog.BUTTON_NEUTRAL)。 「メソッド getButton(int) は、タイプ AlertDialog.Builder に対して定義されていません」。私はそれを正しくやったので、なぜエラーが発生するのだろうかと思います。誰もがそれを修正する考えを持っていますか、ありがとう。

【UPDATE!!】 いつもお世話になっております。これが私の最終的な方法ですsetOnShowListener()

dialog.setOnShowListener(new DialogInterface.OnShowListener()
    {
        @Override
        public void onShow(DialogInterface dialog)
        {
            Button retrieve = ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_NEUTRAL);
            retrieve.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    datasource.opentoread();
                    String[] hari = datasource.fetchDaily(ids.getText().toString());
                    datasource.close();
                    day.setText(String.valueOf(hari[0]));
                    subject.setText(String.valueOf(hari[1]));
                    time.setText(String.valueOf(hari[2]));
                    location.setText(String.valueOf(hari[3]));
                    lecture.setText(String.valueOf(hari[4]));
                    Toast.makeText(getApplicationContext(), "Retrieve success", Toast.LENGTH_LONG).show();
                }
            });
        }
    });
    return dialog;
4

3 に答える 3

3

最初のものは setOnShowListener にあり、「メソッド setOnShowListener(new DialogInterface.OnShowListener(){}) は、タイプ AlertDialog.Builder に対して定義されていません」

これでエラーが発生する理由は 2 つあります。

builder.setNegativeButton(R.string.cancel, null);
return builder.create();

builder.setOnShowListener(new DialogInterface.OnShowListener() ...
  1. を呼び出した後、コードに到達することはありませんreturn
  2. setOnShowListener()AlertDialog.Builder ではなく、AlertDialog のメソッドです。

「メソッドgetButton(int)は、タイプAlertDialog.Builderに対して未定義です」と言う

これは同じ問題で、getButton()AlertDialog.Builder ではなく AlertDialog のメソッドです。


次のようなことを試してください:

...
builder.setNegativeButton(R.string.cancel, null);

final AlertDialog dlg = builder.create();
dlg.setOnShowListener(new DialogInterface.OnShowListener()
{
    @Override
    public void onShow(DialogInterface dialog)
    {
        Button retrieve = dlg.getButton(AlertDialog.BUTTON_NEUTRAL);
        // Changed this   ^^^
        retrieve.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //do nothing;
            }
        });
    }
});
return dlg;
于 2013-03-18T23:30:46.370 に答える
1

AlertDialog.Builder のドキュメントを見ると、setOnShowListenerの有効な方法ではありませんAlertDialog.Builder。ただし、AlertDialogの戻り値の型であるの有効なメソッドですbuilder.create()。同様に、getButtonこれは実際には のメソッドですAlertDialog。したがって、コードは次のようになります。

AlertDialog alertDialog = builder.create();
alertDialog.setOnShowListener(new DialogInterface.OnShowListener()
{
    @Override
    public void onShow(DialogInterface dialog)
    {
        Button retrieve = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
        retrieve.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //do nothing;
            }
        });
    }
});
于 2013-03-18T23:30:48.853 に答える
0

または、AlertDialog を作成する代わりに、標準のダイアログを使用して、必要なときにそれを閉じたり、ユーザーがダイアログを閉じたときに聞いたりすることができます。これは、ダイアログ (AlertDialog) を閉じるボタン クリックの既定の動作を使用する代わりに、より適切な代替手段になります。

于 2013-03-18T23:44:04.873 に答える