1

我最近切换到 AndEngine 来玩这个引擎。在切换之前,我已经实现了一个DialogFragment工作得很好。现在我想把它“移植”DialogFragment到AndEngine。因为在 AndEngine 中不支持 FragmentActivity(据我所知),我决定将我的代码改为简单的Dialog。现在对话框打开得很好,但完全空白。只是一个带边框的黑色小矩形。

我看不出我的代码有什么问题……也许你可以帮忙。

public class SimpleDialog extends Dialog {

    final long number;
    Context context;

    public SimpleDialog (Context context, long number) {
        super(context);
        this.number = number;
        this.context = context;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        LayoutInflater inflater = ResourceManager.getInstance().activity.getLayoutInflater();

        final View view = inflater.inflate(R.layout.logindialog, null);

        final EditText editTextUserName = (EditText) view.findViewById(R.id.usernameToSubmit);
        final EditText editTextPassword = (EditText) view.findViewById(R.id.passwordToSubmit);

        TextView numberText = (TextView) view.findViewById(R.id.numberText);
        highscoreText.setText("Number: " + Long.toString(number));

        builder.setView(view)
        .setNegativeButton(R.string.login_submit, null)
        .setPositiveButton(R.string.login_abort, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dismiss();
            }
        });

        final AlertDialog d = builder.create();

        d.setOnShowListener(new DialogInterface.OnShowListener() {

            @Override
            public void onShow(DialogInterface dialog) {
                Button b = d.getButton(AlertDialog.BUTTON_NEGATIVE);

                b.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {

                    }
                });

            }
        });
    }

这就是我打开对话框的方式:

ResourceManager.getInstance().activity.runOnUiThread(new Runnable() {

    @Override
    public void run() {
        new SimpleDialog(ResourceManager.getInstance().activity, number).show();
    }

});

如果您还需要我的布局,请告诉我。非常感谢!

4

1 回答 1

1

问题是您正在使用AlertDialog.Builder而不是修改您自己的对话框实例。AlertDialog.Builder创建自己的 AlertDialog,并改为修改实例。它不会,也不会影响您的SimpleDialog实例。

由于您已经在使用 Builder 来创建对话框,因此我认为不需要扩展Dialog自身。为什么不将 Builder 代码移动到方法或包装类中,并直接调用该方法?

像这样的东西:

public class DialogRunner {

  public static void createAndShowDialog (Context context, long number){
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    LayoutInflater inflater = LayoutInflater.from (context);

    final View view = inflater.inflate(R.layout.logindialog, null);

    final EditText editTextUserName = (EditText) view.findViewById(R.id.usernameToSubmit);
    final EditText editTextPassword = (EditText) view.findViewById(R.id.passwordToSubmit);

    TextView numberText = (TextView) view.findViewById(R.id.numberText);
    highscoreText.setText("Number: " + Long.toString(number));

    builder.setView(view)
      .setNegativeButton(R.string.login_submit, null)
      .setPositiveButton(R.string.login_abort, new DialogInterface.OnClickListener() {

      @Override
      public void onClick(DialogInterface dialog, int which) {
        dismiss();
      }
    });

    final AlertDialog d = builder.create();

    d.setOnShowListener(new DialogInterface.OnShowListener() {

      @Override
      public void onShow(DialogInterface dialog) {
        Button b = d.getButton(AlertDialog.BUTTON_NEGATIVE);

        b.setOnClickListener(new View.OnClickListener() {

          @Override
          public void onClick(View v) {

          }
        });

      }
    });

    d.show();
  }
}

跑步:

ResourceManager.getInstance().activity.runOnUiThread(new Runnable() {

    @Override
    public void run() {
        DialogRunner.createAndShowDialog(ResourceManager.getInstance().activity, number);
    }

});
于 2013-10-17T22:10:27.600 回答