2012-10-09 3 views
0

동일한 파일에서 다른 클래스의 alertdialog를 호출하려고합니다. 내가 여기서 어디서 잘못 했니? AlertDialog를 확장하려고 시도하지만이 작업을 수행하는 방법을 잘 모르겠습니다. public main class에 있기를 원하지 않습니다. 시도해 볼 수는 있지만 가능한 경우 분리 가능한 클래스에 있어야합니다.다른 클래스의 AlerDialog 호출

class MyDialog extends AlertDialog { 
public static Context context; 
public static int theme; 
protected MyDialog(Context context, int theme) { 
    super(context, theme); 
    MyDialog.context = context; 

    theme = THEME_HOLO_DARK; 
    MyDialog.theme = theme; 
} 

public void onCreateAlertDialog() { 
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(context); 
    alertDialog.setTitle("Auto Start") 
    .setMessage("Start playing after: 30 sec") 
    .setIcon(R.drawable.info) 
    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      Toast.makeText(context, "Auto start cancaled!", Toast.LENGTH_SHORT).show(); 
      dialog.cancel(); 
      } 
     } 
    ); 
    alertDialog.show(); 
} 
} 

나는 다음과 같은 기본 클래스에서 호출 :

Context context = MyDialog.context; 
int i = MyDialog.theme; 
MyDialog md = new MyDialog(context, i); 
md.onCreateAlertDialog(); 

답변

0

나는 그것이 당신이 그것을 초기화되지 않았습니다 컨텍스트 변수에서 오는 것이라고 생각합니다. 당신은 당신이에서 대화 상자를 호출하는 활동에서 그것을 얻을해야합니다 당신은에 AlertDialog.Builder를 사용하는

class MyActivity extends Activity{ 
    ... 
    Context context = this; 
    MyDialog md = new MyDialog(context, i); 
    ... 
} 
+0

당신은, 좋은의 약화시켜 준다이 커뮤니티에 바로 작업 할 수 있습니다

https://github.com/ChristopheVersieux/HoloEverywhere/blob/master/library/src/com/WazaBe/HoloEverywhere/app/AlertDialog.java :) –

0

당신이 그것을 빌드 할 때 항상에 AlertDialog 클래스의 인스턴스를 반환하는. 클래스의 인스턴스를 반환하기 위해 정적 빌더를 오버라이드해야하지만 실제로는 불가능합니다.

HoloEverywhere 라이브러리에 설명 된대로 Dialog 클래스를 확장하고 자신 만의 AlertDialog 구현을 만들 수 있습니다.

public class AlertDialog extends Dialog implements DialogInterface { 
    public static class Builder { 
     private final AlertController.AlertParams P; 

     public Builder(Context context) { 
      this(context, resolveDialogTheme(context, 0)); 
     } 

     public Builder(Context context, int theme) { 
      P = new AlertController.AlertParams(new ContextThemeWrapper(
        context, resolveDialogTheme(context, theme))); 
      P.mTheme = theme; 
     } 

     public AlertDialog create() { 
      final AlertDialog dialog = new AlertDialog(P.mContext, P.mTheme); 
      P.apply(dialog.mAlert); 
      dialog.setCancelable(P.mCancelable); 
      if (P.mCancelable) { 
       dialog.setCanceledOnTouchOutside(true); 
      } 
      dialog.setOnCancelListener(P.mOnCancelListener); 
      if (P.mOnKeyListener != null) { 
       dialog.setOnKeyListener(P.mOnKeyListener); 
      } 
      return dialog; 
     } 

     public Context getContext() { 
      return P.mContext; 
     } 

     public Builder setAdapter(final ListAdapter adapter, 
       final OnClickListener listener) { 
      P.mAdapter = adapter; 
      P.mOnClickListener = listener; 
      return this; 
     } 

     public Builder setCancelable(boolean cancelable) { 
      P.mCancelable = cancelable; 
      return this; 
     } 

     public Builder setCheckedItem(int checkedItem) { 
      P.mCheckedItem = checkedItem; 
      return this; 
     } 

     public Builder setCursor(final Cursor cursor, 
       final OnClickListener listener, String labelColumn) { 
      P.mCursor = cursor; 
      P.mLabelColumn = labelColumn; 
      P.mOnClickListener = listener; 
      return this; 
     } 

     public Builder setCustomTitle(View customTitleView) { 
      P.mCustomTitleView = customTitleView; 
      return this; 
     } 

     public Builder setIcon(Drawable icon) { 
      P.mIcon = icon; 
      return this; 
     } 

     public Builder setIcon(int iconId) { 
      P.mIconId = iconId; 
      return this; 
     } 

     public Builder setIconAttribute(int attrId) { 
      TypedValue out = new TypedValue(); 
      P.mContext.getTheme().resolveAttribute(attrId, out, true); 
      P.mIconId = out.resourceId; 
      return this; 
     } 

     public Builder setInverseBackgroundForced(boolean useInverseBackground) { 
      P.mForceInverseBackground = useInverseBackground; 
      return this; 
     } 

     public Builder setItems(CharSequence[] items, 
       final OnClickListener listener) { 
      P.mItems = items; 
      P.mOnClickListener = listener; 
      return this; 
     } 

     public Builder setItems(int itemsId, final OnClickListener listener) { 
      P.mItems = P.mContext.getResources().getTextArray(itemsId); 
      P.mOnClickListener = listener; 
      return this; 
     } 

     public Builder setMessage(CharSequence message) { 
      P.mMessage = message; 
      return this; 
     } 

     public Builder setMessage(int messageId) { 
      P.mMessage = P.mContext.getText(messageId); 
      return this; 
     } 

     public Builder setMultiChoiceItems(CharSequence[] items, 
       boolean[] checkedItems, 
       final OnMultiChoiceClickListener listener) { 
      P.mItems = items; 
      P.mOnCheckboxClickListener = listener; 
      P.mCheckedItems = checkedItems; 
      P.mIsMultiChoice = true; 
      return this; 
     } 

     public Builder setMultiChoiceItems(Cursor cursor, 
       String isCheckedColumn, String labelColumn, 
       final OnMultiChoiceClickListener listener) { 
      P.mCursor = cursor; 
      P.mOnCheckboxClickListener = listener; 
      P.mIsCheckedColumn = isCheckedColumn; 
      P.mLabelColumn = labelColumn; 
      P.mIsMultiChoice = true; 
      return this; 
     } 

     public Builder setMultiChoiceItems(int itemsId, boolean[] checkedItems, 
       final OnMultiChoiceClickListener listener) { 
      P.mItems = P.mContext.getResources().getTextArray(itemsId); 
      P.mOnCheckboxClickListener = listener; 
      P.mCheckedItems = checkedItems; 
      P.mIsMultiChoice = true; 
      return this; 
     } 

     public Builder setNegativeButton(CharSequence text, 
       final OnClickListener listener) { 
      P.mNegativeButtonText = text; 
      P.mNegativeButtonListener = listener; 
      return this; 
     } 

     public Builder setNegativeButton(int textId, 
       final OnClickListener listener) { 
      P.mNegativeButtonText = P.mContext.getText(textId); 
      P.mNegativeButtonListener = listener; 
      return this; 
     } 

     public Builder setNeutralButton(CharSequence text, 
       final OnClickListener listener) { 
      P.mNeutralButtonText = text; 
      P.mNeutralButtonListener = listener; 
      return this; 
     } 

     public Builder setNeutralButton(int textId, 
       final OnClickListener listener) { 
      P.mNeutralButtonText = P.mContext.getText(textId); 
      P.mNeutralButtonListener = listener; 
      return this; 
     } 

     public Builder setOnCancelListener(OnCancelListener onCancelListener) { 
      P.mOnCancelListener = onCancelListener; 
      return this; 
     } 

     public Builder setOnItemSelectedListener(
       final AdapterView.OnItemSelectedListener listener) { 
      P.mOnItemSelectedListener = listener; 
      return this; 
     } 

     public Builder setOnKeyListener(OnKeyListener onKeyListener) { 
      P.mOnKeyListener = onKeyListener; 
      return this; 
     } 

     public Builder setOnPrepareListViewListener(
       OnPrepareListViewListener listener) { 
      P.mOnPrepareListViewListener = listener; 
      return this; 
     } 

     public Builder setPositiveButton(CharSequence text, 
       final OnClickListener listener) { 
      P.mPositiveButtonText = text; 
      P.mPositiveButtonListener = listener; 
      return this; 
     } 

     public Builder setPositiveButton(int textId, 
       final OnClickListener listener) { 
      P.mPositiveButtonText = P.mContext.getText(textId); 
      P.mPositiveButtonListener = listener; 
      return this; 
     } 

     public Builder setRecycleOnMeasureEnabled(boolean enabled) { 
      P.mRecycleOnMeasure = enabled; 
      return this; 
     } 

     public Builder setSingleChoiceItems(CharSequence[] items, 
       int checkedItem, final OnClickListener listener) { 
      P.mItems = items; 
      P.mOnClickListener = listener; 
      P.mCheckedItem = checkedItem; 
      P.mIsSingleChoice = true; 
      return this; 
     } 

     public Builder setSingleChoiceItems(Cursor cursor, int checkedItem, 
       String labelColumn, final OnClickListener listener) { 
      P.mCursor = cursor; 
      P.mOnClickListener = listener; 
      P.mCheckedItem = checkedItem; 
      P.mLabelColumn = labelColumn; 
      P.mIsSingleChoice = true; 
      return this; 
     } 

     public Builder setSingleChoiceItems(int itemsId, int checkedItem, 
       final OnClickListener listener) { 
      P.mItems = P.mContext.getResources().getTextArray(itemsId); 
      P.mOnClickListener = listener; 
      P.mCheckedItem = checkedItem; 
      P.mIsSingleChoice = true; 
      return this; 
     } 

     public Builder setSingleChoiceItems(ListAdapter adapter, 
       int checkedItem, final OnClickListener listener) { 
      P.mAdapter = adapter; 
      P.mOnClickListener = listener; 
      P.mCheckedItem = checkedItem; 
      P.mIsSingleChoice = true; 
      return this; 
     } 

     public Builder setTitle(CharSequence title) { 
      P.mTitle = title; 
      return this; 
     } 

     public Builder setTitle(int titleId) { 
      P.mTitle = P.mContext.getText(titleId); 
      return this; 
     } 

     public Builder setView(View view) { 
      P.mView = view; 
      P.mViewSpacingSpecified = false; 
      return this; 
     } 

     public Builder setView(View view, int viewSpacingLeft, 
       int viewSpacingTop, int viewSpacingRight, int viewSpacingBottom) { 
      P.mView = view; 
      P.mViewSpacingSpecified = true; 
      P.mViewSpacingLeft = viewSpacingLeft; 
      P.mViewSpacingTop = viewSpacingTop; 
      P.mViewSpacingRight = viewSpacingRight; 
      P.mViewSpacingBottom = viewSpacingBottom; 
      return this; 
     } 

     public AlertDialog show() { 
      AlertDialog dialog = create(); 
      dialog.show(); 
      return dialog; 
     } 
    } 

    public static final int THEME_HOLO_DARK = 1; 
    public static final int THEME_HOLO_LIGHT = 2; 

    static int resolveDialogTheme(Context context, int resid) { 
     if (resid == THEME_HOLO_DARK) { 
      return R.style.Holo_Theme_Dialog_Alert; 
     } else if (resid == THEME_HOLO_LIGHT) { 
      return R.style.Holo_Theme_Dialog_Alert_Light; 
     } else if (resid >= 0x01000000) { 
      return resid; 
     } else { 
      TypedValue outValue = new TypedValue(); 
      context.getTheme().resolveAttribute(R.attr.alertDialogTheme, 
        outValue, true); 
      return outValue.resourceId; 
     } 
    } 

    private final AlertController mAlert; 

    protected AlertDialog(Context context) { 
     this(context, false, null, resolveDialogTheme(context, 0)); 
    } 

    protected AlertDialog(Context context, boolean cancelable, 
      OnCancelListener cancelListener) { 
     this(context, cancelable, cancelListener, 
       resolveDialogTheme(context, 0)); 
    } 

    protected AlertDialog(Context context, boolean cancelable, 
      OnCancelListener cancelListener, int theme) { 
     super(context, resolveDialogTheme(context, theme)); 
     setCancelable(cancelable); 
     setOnCancelListener(cancelListener); 
     mAlert = new AlertController(context, this, getWindow()); 
    } 

    protected AlertDialog(Context context, int theme) { 
     this(context, false, null, theme); 
    } 

    public Button getButton(int whichButton) { 
     return mAlert.getButton(whichButton); 
    } 

    public ListView getListView() { 
     return mAlert.getListView(); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mAlert.installContent(); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (mAlert.onKeyDown(keyCode, event)) { 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

    @Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) { 
     if (mAlert.onKeyUp(keyCode, event)) { 
      return true; 
     } 
     return super.onKeyUp(keyCode, event); 
    } 

    @Deprecated 
    public void setButton(CharSequence text, Message msg) { 
     setButton(BUTTON_POSITIVE, text, msg); 
    } 

    @Deprecated 
    public void setButton(CharSequence text, final OnClickListener listener) { 
     setButton(BUTTON_POSITIVE, text, listener); 
    } 

    public void setButton(int whichButton, CharSequence text, Message msg) { 
     mAlert.setButton(whichButton, text, null, msg); 
    } 

    public void setButton(int whichButton, CharSequence text, 
      OnClickListener listener) { 
     mAlert.setButton(whichButton, text, listener, null); 
    } 

    @Deprecated 
    public void setButton2(CharSequence text, Message msg) { 
     setButton(BUTTON_NEGATIVE, text, msg); 
    } 

    @Deprecated 
    public void setButton2(CharSequence text, final OnClickListener listener) { 
     setButton(BUTTON_NEGATIVE, text, listener); 
    } 

    @Deprecated 
    public void setButton3(CharSequence text, Message msg) { 
     setButton(BUTTON_NEUTRAL, text, msg); 
    } 

    @Deprecated 
    public void setButton3(CharSequence text, final OnClickListener listener) { 
     setButton(BUTTON_NEUTRAL, text, listener); 
    } 

    public void setCustomTitle(View customTitleView) { 
     mAlert.setCustomTitle(customTitleView); 
    } 

    public void setIcon(Drawable icon) { 
     mAlert.setIcon(icon); 
    } 

    public void setIcon(int resId) { 
     mAlert.setIcon(resId); 
    } 

    public void setIconAttribute(int attrId) { 
     TypedValue out = new TypedValue(); 
     getContext().getTheme().resolveAttribute(attrId, out, true); 
     mAlert.setIcon(out.resourceId); 
    } 

    public void setInverseBackgroundForced(boolean forceInverseBackground) { 
     mAlert.setInverseBackgroundForced(forceInverseBackground); 
    } 

    public void setMessage(CharSequence message) { 
     mAlert.setMessage(message); 
    } 

    @Override 
    public void setTitle(CharSequence title) { 
     super.setTitle(title); 
     mAlert.setTitle(title); 
    } 

    public void setView(View view) { 
     mAlert.setView(view); 
    } 

    public void setView(View view, int viewSpacingLeft, int viewSpacingTop, 
      int viewSpacingRight, int viewSpacingBottom) { 
     mAlert.setView(view, viewSpacingLeft, viewSpacingTop, viewSpacingRight, 
       viewSpacingBottom); 
    } 
} 
관련 문제