簡體   English   中英

警報對話框不出現

[英]Alert dialog does not appear

我有一個應用程序,其中在用戶啟動應用程序時啟動計時器。 10秒后, AlertDialog彈出一個AlertDialog擴孔僅15秒並顯示一個計時器,14秒后消失。 在應用程序的第一個活動上運行良好。 如果用戶從第一個Activty > TimedNotify Activity通過,則計時器將在10秒后停止。 onUserInteraction()TimedNotify計時器重新啟動並工作精絕。 請幫我解決我要去的地方。

public class FirstActivity extends TimedNotify{
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    {    
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.timercheck);    
        final Button btnstart2 = (Button) findViewById(R.id.btn);

        btnstart2.setOnClickListener( new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(FirstActivity.this,
                                       TimedNotify.class);
                 startActivity(intent);
            }
        });
    }
}

public class TimedAlert extends Activity 
{
    static CountDownTimer timer1, timer2;
    int flag = 0;
    protected static final String TAG = null;
    public static AlertDialog alert, alertdialog;
    private static Context context;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final TextView mCounter1TextField = (TextView) findViewById (R.id.mCounter1TextField);

        // first timer set for 10sec
        timer1 = new CountDownTimer(10000, 1000) 
        {
            @Override
            public void onTick(long millisUntilFinished) 
            {
                Log.v(TAG, "timer1 ticking");
                mCounter1TextField.setText("Seconds left: "
                                            + formatTime(millisUntilFinished));
            }

            public void onFinish() {
                //after 10sec display alert box and show timer 
                Log.v(TAG, "timer1 finished");
                timer1.cancel();
                AlertDialog.Builder builder = new AlertDialog.Builder(
                                    TimedAlert.this);
                builder.setTitle("Session Time Out");
                builder.setMessage("00:15");
                builder.setPositiveButton("Resume", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog2,int iwhich)
                    {
                        Intent in = new Intent(TimedAlert.this,FirstActivity.class);
                        //in case there are many events ..the intent should be passed  to the last activity on clicking resume
                        in.setAction(Intent.ACTION_MAIN);
                        in.addCategory(Intent.CATEGORY_LAUNCHER);
                        onUserInteraction();
                    }
                });

                builder.setNegativeButton ("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog2,int iwhich)
                    {
                        timer2.cancel();
                        timer1.start();
                    }
                });

                alert = builder.create();
                alert.show();

                timer2 = new CountDownTimer(15000, 1000) 
                {
                    @Override
                    public void onTick(long millisUntilFinished)
                    {
                        Log.v(TAG, "timer2 ticking");
                        alert.setMessage("Your Session will expire in 5 minutes . Timleft00:"+  (millisUntilFinished / 1000));
                        mCounter1TextField.setText("Seconds left: "+  formatTime (millisUntilFinished));
                    }

                    //after 15 sec dismiss alert box
                    public void onFinish() {
                        Log.v(TAG, "timer2 finished");
                        timer2.cancel();
                        alert.dismiss();
                    }
                }.start();
            }
        }.start();
    }

    @Override
    public void onBackPressed() {
        Intent in = new Intent(TimedAlert.this, FirstActivity.class);
        startActivity(in);
    }

    public String formatTime(long millis) {
        String output = "00:00";
        long seconds = millis / 1000;
        long minutes = seconds / 60;
        seconds = seconds % 60;
        minutes = minutes % 60;
        String secondsD = String.valueOf(seconds);
        String minutesD = String.valueOf(minutes);

        if (seconds < 10)
            secondsD = "0" + seconds;
        if (minutes < 10)
            minutesD = "0" + minutes;
        output = minutesD + " : " + secondsD;
        return output;
    }

    public void onUserInteraction() {
        super.onUserInteraction();
        // Remove any previous callback
        try {
            Log.v(TAG, "user interacted");
            timer1.start();
            timer2.cancel();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        Log.v(TAG, "paused");
        onUserInteraction();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

        Log.v(TAG, "resumed");
        onUserInteraction();
    }

    private void handleIntent(Intent intent) {
        timer1.start();
    }

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();

        Log.v(TAG, "stopped");
        timer1.start();
    }

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        Log.v(TAG, "started");
        timer1.start();
    }
}

好的,以下是我指出的一些可能會幫助您的事情:

public void onClick(DialogInterface dialog2, int iwhich) {
    Intent in = new Intent(TimedAlert.this,
            FirstActivity.class);
    in.setAction(Intent.ACTION_MAIN);
    in.addCategory(Intent.CATEGORY_LAUNCHER);

    onUserInteraction();
}

您沒有startActivity(in); 設置完所有參數后。

為什么onPause()onResume()調用onUserInteraction() ,而onStart()onStop()沒有呢?

實際上,您應該選擇僅使用onPause()onResume()還是onStart()onStop() 此外, onPause()onStop()不應重新啟動計時器嗎?

進一步考慮報告的問題,您說是在您進行第二項活動時遇到問題。 查看活動的生命周期 -我懷疑可能正在發生的是您啟動活動的新實例。 嘗試將清單設置為對活動使用android:launch mode="singleTask"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM