2011-10-25 12 views
4

を介したメッセージは、私は、サブクラスからコンテキストにアクセスする方法についていくつかの情報もおよそ「トースト」TimerTaskを

runOnUiThread(new Runnable() { 
    public void run() { 
    // Do something 
    } 
}); 

しかし、私の場合には、それが動作しないいくつかの情報を見つけました。アプリケーションはまだ実行されていますが、アクティビティが既に破棄されている可能性があります。最初の(メイン)アクティビティは、私のTimerTaskが作成された親アクティビティです。私のコード:

TimerTask tt = new TimerTask() { 
    @Override 
    public void run() { 
    // do something (cut) 

    // and at the end show info 
    getParent().runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
     Toast.makeText(getParent(), 
        getResources().getString(R.string.st_toast_msg_stopped), 
        Toast.LENGTH_LONG).show(); 
     } 
    }); 
    } 
}; 
curTimer.schedule(tt, millisecondsUntilStop); 

ログにはエラー/例外はありません。しかし、トーストされたメッセージは表示されません。 。。:-(

今、私はあなたの誰かが私を助けることを願って他に何私ができる/してみてくださいか見当がつかない

PS:たぶん私は間違ったコンテキストを使用しかし、私はまた、のようないくつかの他のコンテキストを試してみました?現在のアクティビティのコンテキスト、ApplicationContext、...。

答えて

2

ここでは間違った文脈であるgetParent()を使用しています。代わりに、このようなあなたのためのヒント

TimerTask tt = new TimerTask() { 
    @Override 
    public void run() { 
    // do something (cut) 

    // and at the end show info 
    Activity_name.this.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
     Toast.makeText(Activity_name.this, 
        getResources().getString(R.string.st_toast_msg_stopped), 
        Toast.LENGTH_LONG).show(); 
     } 
    }); 
    } 
}; 
+0

これは、ありがとう! – nauni77

0

むしろよりTimerTaskを、なぜユーザーAlarmManagerを使用した場合、放送のあなたの火?ブロードキャストをオフに解雇するPendingIntentを設定し、あなたにそれをキャッチあなたが作成したBroadcastRecieverを持っているなら、あなたのトーストを表示するBroadcastRecieverのコンテキストを持っているでしょう。ここでは簡単な例があります。

あなたがあなたの活動にごTimerTaskをを設定している今までに、代わりにこれを行う

AlarmManager alarmManager = (AlarmManager)Context.getSystemService(Context.ALARM_SERVICE); 
Intent broadcastIntent = new Intent("yourBroadcastAction"); 
PendingIntent pendingIntent = PendingIntenet.getBroadcast(this, 0, broadcastIntent, 0); 
alarmManager.set(AlarmManager.ELAPSED_REALTIME, millisecondsUntilStop, broadcastIntent); 

それからちょうどそのようなあなたのトーストを行うyourBroadcastActionためとonRecieve()方法でフィルタを持っているBroadcastRecieverを作成します。

+0

感謝をcurrent_Activity.thisを使用するようにgetParent()試みを使用します。私はこれも動作するはずだと確信しています!どうもありがとう! – nauni77