2011-07-01 22 views
1

私は別のダイアログのポップアップのポップアップを含むアプリケーションを作成しました。私が書いたコードがされています。今、私の質問は、各ダイアログのために、私は別のonclick機能を必要とするということであるAlertDialogを制御する方法

if (lDiffFromToday >= 0 && lDiffFromToday <= DeclareVariable.CYCLE_MAX_LENGTH) 
      { 

       AlertDialog.Builder alrtStartMonitoring = new AlertDialog.Builder(this); 
       alrtStartMonitoring.setTitle("    Start Monitoring"); 
       alrtStartMonitoring.setMessage("Set start date of cycle as"+" "+sdFormatter.format(dtSelDate)); 
       alrtStartMonitoring.setPositiveButton("Yes", this); 
       AlertDialog alert = alrtStartMonitoring.create(); 
       alert.show(); 
      } 

else if (dtSelDate.getTime()> dtStartDate.getTime() && dtSelDate.getTime() <= currentDate.getTime() && !bCycleStopped) 
     { 
      long lDiffFromStart =dtSelDate.getTime()-dtStartDate.getTime(); 
      lDiffFromStart=lDiffFromStart/(1000 * 60 * 60 * 24); 
      if (lDiffFromStart >= DeclareVariable.CYCLE_MIN_LENGTH) 
      { 
       bActionOk = true; 
       AlertDialog.Builder alrtStartMonitoring = new AlertDialog.Builder(this); 
       alrtStartMonitoring.setTitle("    Confirm New Cycle"); 
       alrtStartMonitoring.setMessage("Set start date of cycle as" + " " + sdFormatter.format(dtSelDate)); 
       alrtStartMonitoring.setPositiveButton("Yes", this); 
       AlertDialog alert = alrtStartMonitoring.create(); 
       alert.show(); 
      } 
} 


public void onClick(DialogInterface dialog, int id) 
    { 
     CycleManager.getSingletonObject().setHistoryDate(dtSelDate); 
     int iStopStartCount = CycleManager.getSingletonObject().getStopStartCount();     
     if(iStopStartCount>0) 
      CycleManager.getSingletonObject().setStopStartDate(dtSelDate, iStopStartCount); 
     displayDay(); 
    } 

が、私は別のonclick関数を書くとき、私の場合には、競合が存在することになるより。私は各ダイアログの中にonclick関数を書くことで問題を解決できるかもしれませんが、その場合は私の変数をfinalとして宣言しなければならないので、私が使ったダイアログごとに関数onclickを書くことでどうすればいいですか?

+0

コードを正しくフォーマットしてください。 – mohamede1945

+0

申し訳ありませんが、私に答えを教えてください。 – AndroidDev

答えて

1

別の解決策は、クラスのAlertDialogインスタンスを作成することです。その後のOnClickメソッドで:

public void onClick(DialogInterface dialog, int id) 
{ 
    if (dialog == m_Dialog1) 
    { 
    // server dialog 1 
    } 

} 
+0

どうすればいいですか? – AndroidDev

+0

はこれが正しいですか? [DialogInterface.OnClick()](http://developer.android.com/reference/android/content/DialogInterface.OnClickListener.html)からonClickを実装する場合、idは押されたボタンIDです。 –

+0

はい、私はIDをチェックしていませんが、ダイアログ自体です。 – kgiannakakis

0

は、私はあなたがそれをこのように作ることができる代わりに、

alrtStartMonitoring.setPositiveButton("Yes", this); 

DialogInterface.OnClickListener

を実装するクラスを作ったことがわかります

alrtStartMonitoring.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 

public void onClick (DialogInterface dialog, int which) { 

} 
}); 

setPositiveButtonのそれぞれについて、異なる012を定義することができますリスナー

・ホープこれはあなた自身のDialogInterface.OnClickListenerのクラスを作成し、最終的としてマークする必要はありませんが、彼らはへのアクセス権を持つようにしたいんあなたのメインクラスから適切な変数とそれらをインスタンス化しないのはなぜ

+0

yeh私が知っていることを知っていることを学ぶ必要がありますので、私は変数の最終的な必要はありません.thatsなぜ私はこのステップをスキップ – AndroidDev

+0

あなたがそれらをインスタンス変数として宣言すれば、 。 – mohamede1945

+0

あなたは正しいですが、okをクリックすると、デバイスにエラーが発生し、アプリケーションが終了します。 – AndroidDev

0

を支援(効果的にそれらを注入する)。それではできます

FooDialogOnClickListener l1 = new FooDialogOnClickListener(dtSelData, ...); 
BarDialogOnClickListener l2 = new BarDialogOnClickListener(iStopStartCount, ...); 

if (...) { 
    // ... 
    alrtStartMonitoring.setPositiveButton("Yes", l1); 
} else { 
    // ... 
    alrtStartMonitoring.setPositiveButton("Yes", l2); 
} 
関連する問題