在活动之外显示对话

时间:2011-04-20 21:01:20

标签: android

我正在尝试从非活动java类启动对话。如果是这样,可以这样做吗?

2 个答案:

答案 0 :(得分:9)

您可以在活动之外显示对话框,但您需要对Context对象的引用。

此类不是活动,但可以创建和显示对话框:

public class DialogExample {
  public Context mContext;

  public DialogExample(Context context) {
    mContext = context;
  }

  public void dialogExample() {
    AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
    builder.setMessage("Dialog created in a separate class!");
    builder.show();
  }

然后您可以在活动中引用它:

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

  DialogExample otherClass = new DialogExample(this);
  otherClass.dialogExample();
}

当您使用实用程序方法创建在应用程序中的多个活动中使用的类似对话框时,这可能很方便。

答案 1 :(得分:-1)

我认为这可能有用。你可以对它进行静态引用。

public class AddDecisionActivity extends Activity{

public static AddDecisionActivity addDecAct;

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

    setContentView(R.layout.layout_register_decision);
    addDecAct = AddDecisionActivity.this;
}

public static AddDecisionActivity getAddDecAct(){
    return addDecAct;
}
}

然后你可以进一步参考它,并能够创建警告对话框或任何你需要的东西。

private void showCloseConfirmationAlert(String message, final String action){
    AlertDialog.Builder alertBuilder = new AlertDialog.Builder(***AddDecisionActivity.getAddDecAct()***);
    alertBuilder.setTitle(R.string.alert_title);
    alertBuilder.setMessage(message);
    alertBuilder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        }
    });
    alertBuilder.setPositiveButton(R.string.si, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            if(action.equals("logout")){
                Intent cerrarS = new Intent(AddDecisionActivity.getAddDecAct(), LoginActivity.class);
                startActivity(cerrarS);
                finish();
            }
            if(action.equals("finish")){
                finish();
            }

        }
    });

    AlertDialog ad = alertBuilder.create();
    ad.show();
}