2015-06-30 54 views
0

我定義爲這個自定義對話框沒有取消,甚至設置撤銷真正

public class ActivityIndicator extends Dialog 
{ 
    private ImageView progress; 
    private ImageView bottomProgress; 

    private int type = INDICATOR_SIMPLE; 

    public static final int INDICATOR_SIMPLE = 0; 
    public static final int INDICATOR_BOTTOM = 1; 

    public ActivityIndicator(Context context, int theme, int type) 
    { 
     super(context, theme); 
     this.type = type; 
     onCreate(null); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.dialog_indicator); 

     progress = (ImageView) findViewById(R.id.progress); 
     bottomProgress = (ImageView) findViewById(R.id.bottomProgress); 

     if(type == INDICATOR_BOTTOM) 
     { 
      progress.setVisibility(View.INVISIBLE); 
     } 
     else if(type == INDICATOR_SIMPLE) 
     { 
      bottomProgress.setVisibility(View.INVISIBLE); 
     } 
     this.setCancelable(false); 
    } 

    @Override 
    public void show() 
    { 
     progress.clearAnimation(); 
     bottomProgress.clearAnimation(); 

     if(type == INDICATOR_BOTTOM) 
     { 
      progress.setVisibility(View.INVISIBLE); 
      new Handler().postDelayed(new Runnable() 
      { 
       @Override 
       public void run() 
       { 
        Animation anim = AnimationUtils.loadAnimation(getContext(), R.anim.rotating_img); 
        bottomProgress.startAnimation(anim); 
       } 
      },400); 
     } 

     if(type == INDICATOR_SIMPLE) 
     { 
      bottomProgress.setVisibility(View.INVISIBLE); 
      new Handler().postDelayed(new Runnable() 
      { 
       @Override 
       public void run() 
       { 
        Animation anim = AnimationUtils.loadAnimation(getContext(), R.anim.rotating_img); 
        progress.startAnimation(anim); 
       } 
      },400); 
     } 
     super.show(); 
    } 

    @Override 
    public void dismiss() 
    { 
     super.dismiss(); 
     progress.clearAnimation(); 
     bottomProgress.clearAnimation(); 
    } 
} 

在我的活動我初始化爲自定義ActivityIndi​​cator後:

 indicator = new ActivityIndicator(this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen, ActivityIndicator.INDICATOR_SIMPLE); 

現在在代碼所示,默認樣式可取消是錯誤的。

然而,在某些時候,我也希望把它取消,這裏是我的代碼:

 indicator.setCancelable(true); 
     indicator.setOnCancelListener(new DialogInterface.OnCancelListener() 
     { 
      @Override 
      public void onCancel(DialogInterface dialog) 
      { 
       finish(); 
      } 
     }); 
indicator.show(); 

當我嘗試按後退按鈕,沒有任何反應,該dialog不取消,也不是取消收聽。這裏有什麼問題?爲什麼它不能自動取消後退鍵的按下

+0

而不是'finish()'嘗試'dismiss()'或'dialog.dismiss()' – Pankaj

+0

@Clairvoyant這就是要點..在哪裏調用這些:)取消偵聽器不工作。後退按下只是沒有做任何事情 –

+0

對不起,我沒有看到你的整個問題 – Pankaj

回答

2

不要OverrideonCreate()。那你調用的方法就是搞砸你的代碼。而是使用初始化模式來初始化Dialog

如果您將onCreate更改爲initialize()並從構造函數調用該代碼,則該代碼將起作用。

請看以下內容。

public ActivityIndicator(Context context, int theme, int type) 
{ 
    super(context, theme); 
    this.type = type; 

    initialize(); 
} 

protected void initialize() 
{ 
    setContentView(R.layout.dialog_indicator); 
    setCancelable(false); 

    progress = (ImageView) findViewById(R.id.progress); 
    bottomProgress = (ImageView) findViewById(R.id.bottomProgress); 

    if(type == INDICATOR_BOTTOM) 
    { 
     progress.setVisibility(View.INVISIBLE); 
    } 
    else if(type == INDICATOR_SIMPLE) 
    { 
     bottomProgress.setVisibility(View.INVISIBLE); 
    } 
} 
1

請評論您的seton取消標籤並使用下面的代碼並檢查。

indicator.setOnKeyListener(new OnKeyListener() { 
    @Override 
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { 
     if(keyCode == KeyEvent.KEYCODE_BACK){ 
      finish(); 
     } 
    } 
} 
+0

好吧,這是很好的答案,但它仍然不回答我的問題,爲什麼這種行爲? –

+0

這是否適合你。 – Pavya

+0

這不是一個可行的解決方案。它可能會解決這個問題,但這是一個破解。 – Neil

0

當您創建的ActivityIndicator一個實例,在OnCreate方法,setCancelable設置爲false。

嘗試刪除..

+0

但創建對象時他將其設置爲true。 – Pankaj

0

了你的問題只是改變你的構造像下面,你會得到所謂的取消聽者:

public ActivityIndicator(Context context, int theme, int type, boolean isCancelable) 
    { 
     super(context, theme); 
     this.type = type; 
     onCreate(null); 
     this.setCancelable(isCancelable); //setcancelable here on the basis of boolean value and remove setcancelable from onCreate() 
    } 

電話多一個參數的構造是布爾真/假

注意:不要忘記從onCreate()方法中刪除setCancelable()