私は少し新しいAndroidデベロッパーですが、進歩しています。私はMainActivity
を持っています。これは私がブートしたもので、サブアクティビティーのセットがいくつかの作業を行います。Androidからの返品
私は現在、これらのサブアクティビティをタイムアウトにして、何らかのランダムなウィンドウに永久に座るのを避けるためにMainActivity
に戻ります。それは私が取り組んでいるKiosk
タイプのアプリのようなものなので、MainActivity
に戻ることが必要です。
サブアクティビティクラスのHandler and Runnable()
でこれを行うことができました。ハンドラがタイムアウトしてRunnable.run()
が呼び出されたときに次のようにすると、動作します。
Intent intent = new Intent(LightsActivity.this, MainActivity.class);
startActivity(intent);
ただし、MainActivityはonCreate
を再度実行します。 MainActivityはすでにバックグラウンドで実行されているので、新しいインスタンスを開始する代わりに、そのインスタンスに戻りたいと考えています。
私がやりたかったことは、Runnableでfinish()
を呼び出し、アクティビティを閉じてメインに戻ることです。これは正しく機能しません。私はMainActivity onStart()
が走っているのを見て、私が欲しいのはonCreate()
ではありません。
しかし、実際にはLightsActivity
クラスが実行されていないのに、画面にはLightsActivityデザインのレイアウトが表示されます。 LightsActivity.onCreate()
で作成したタイマーがあり、毎秒フィールドが更新されていますが、finish()
(やはり予期される)が呼び出された後に動作しなくなります。アクティビティクラスを停止し、UIをMainActivity
ウィンドウに戻す方法は何ですか?
私は何か間違っているか、これはバグです。すべての文書はfinish()
が私が望むことをするべきだと言います。 LightsActivity.this.finish()
を呼び出すことはRunnableでも機能しないことに注意してください。だから私は考えていないスコープの問題ではありません。
多くのAndroidの経験を持つ人が私を助けることができます。
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop");
}
public void viewLights(View view) {
Log.d(TAG, "Managing the lights");
setContentView(R.layout.activity_lights);
startActivity(m_lights);
}
}
public class LightsActivity extends Activity {
private static final String TAG = LightsActivity.class.getSimpleName();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lights);
handler.postDelayed(finalizer, 1000 * 10);
Log.d(TAG, "onCreate()");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
Runnable finalizer = new Runnable()
{
public void run()
{
Log.d(TAG, "Activity timed out");
finish();
}
};
}
次に出力されます。この単純な例では、他のすべてのコードをコメントアウトして再現することができます。
07-19 13:20:37.761 1363-1363/? D/MainActivity: onCreate()
07-19 13:20:37.767 1363-1363/? D/MainActivity: onStart
07-19 13:21:20.280 1363-1363/com.home.pete.aquarium D/MainActivity: Managing the lights
07-19 13:21:20.569 1363-1363/com.home.pete.aquarium D/LightsActivity: onCreate()
07-19 13:21:20.571 1363-1363/com.home.pete.aquarium D/LightsActivity: onStart
07-19 13:21:21.089 1363-1363/com.home.pete.aquarium D/MainActivity: onStop
07-19 13:21:30.579 1363-1363/com.home.pete.aquarium D/LightsActivity: Activity timed out
07-19 13:21:30.615 1363-1363/com.home.pete.aquarium D/MainActivity: onStart
07-19 13:21:31.100 1363-1363/com.home.pete.aquarium D/LightsActivity: onStop
07-19 13:21:31.100 1363-1363/com.home.pete.aquarium D/LightsActivity: onDestroy
LightsActivity画面は、MainActivityではなく、まだ表示されています。
申し訳ありませんが、それは役に立ちません。 –
関連するすべてのコードの[mcve]を作成できますか? –
私は、ここで完全最小、完全、および検証可能なものを投稿できるとは思わない。私が投稿する方法を知っているコード自体は、Android Studioの多くの必要な作業なしでは構築されません。しかし、https://github.com/buelowp/aquariumページで完全なソースを見ることができます。それをチェックして直接ビルドすることができるはずです。 –