UiApplication.activate()
BlackBerry でメソッドを使用したい。Android では、onResume()
メソッドを使用します。UiApplication.activate()
では、BlackBerry でこのメソッドをどのように使用するのでしょうか?
利用可能な情報はそれほど多くありません。
UiApplication.activate()
BlackBerry でメソッドを使用したい。Android では、onResume()
メソッドを使用します。UiApplication.activate()
では、BlackBerry でこのメソッドをどのように使用するのでしょうか?
利用可能な情報はそれほど多くありません。
ピーターの回答の下にコメントがあるため、この質問に回答するのは困難です。 Android のActivity#onResume()は、通常、単に「変更を加えた後にその場で UI データを更新する」ために使用されることはありません。
onResume()
ユーザーが に戻ったときに Android OS によって呼び出されActivity
ます。これは通常、それを離れた後に発生します...別のアクティビティがその前に表示されたため、またはユーザーがアプリケーションを離れて戻ってきたためです(家に帰って戻ってきた、電話に戻って戻ってきたなど).
BlackBerry では、ユーザーがアプリApplication#activate()
に戻ったときに呼び出されます。このコールバックはアプリレベルで発生します。Android のアプリは、(通常) 多くのアクティビティで構成されています。 ユーザーが個々の Activityに戻ると、アプリ内の各 Activity に対して個別に呼び出されます。onResume()
同一ではありませんが、BlackBerry の同様の構造はScreen
クラスです。Android アプリには多くのアクティビティがあるため、1 つのアプリに多くの画面がある場合があります。したがって、最も類似したものを探している場合は、Peter が提案したようonResume()
に試してみます。
に最も近づくにonResume()
は、おそらくこれらのメソッドの両方が必要です。これは、 が最初に表示されたときScreen#onExposed()
に呼び出されないためです (whileは呼び出します)。拡張する独自のクラスでこれらのメソッドをオーバーライドします(またはなど)。Screen
Activity#onResume()
Screen
MainScreen
問題が UI を更新するタイミングを決定することだけである場合は、使用している UI オブジェクト (フィールド) の種類と、表示する新しいデータをいつ取得するかについて詳しく説明する必要があります。
Android のコールバックScreen
を模倣するために、メイン クラスを作成する方法のサンプル コードを次に示します。onResume()
public final class MyScreen extends MainScreen {
public MyScreen() {
setTitle("MyTitle");
}
protected void onExposed() {
super.onExposed();
onResume();
}
protected void onUiEngineAttached(boolean attached) {
super.onUiEngineAttached(attached);
if (attached) {
onResume();
}
}
private void onResume() {
// TODO: put your Android-like processing here
System.out.println("onResume()");
}
}
activate() について実際に知っておくべきことは何もありません。ドキュメントを見てみると
http://www.blackberry.com/developers/docs/7.1.0api/net/rim/device/api/system/Application.html
「システムは、このアプリケーションをフォアグラウンドにするときに、このメソッドを呼び出します。」
したがって、アプリケーションがバックグラウンドにプッシュされた場合 (たとえば、電話によって)、ユーザーがアイコンをクリックしてアプリケーションをもう一度見ると、 activate() が呼び出されます。対照的に、システムがアプリケーションをバックグラウンドにプッシュしたとき (たとえば、電話がかかってきたとき) は、 activate() が呼び出されます。
activate() は、アプリケーションの初回起動時にも呼び出されることに注意してください。
問題は、BlackBerry コードで複製する必要がある onResume() で何をするかです。これを教えていただければ、ご希望の結果を達成するための最善の方法を提案できるかもしれません。
アップデート
onResume() を使用して Ui を更新しているように見える場合、残念ながら、アプリケーション全体でこれを行う簡単な方法はありません。実際に使用する方法は、更新対象によって異なります。
ただし、ほとんどのフィールドは、内容を変更すると自動的に更新されることに注意してください。簡単な例を挙げると、データを含む EditField があり、.setText("new data"); を使用するとします。メソッドを使用すると、画面上のそのフィールドが自動的に再描画されます。
データベースまたはデータ ソースから入力した画面があり、 activate() でこのデータを更新したいと考えています。そのため、画面の各フィールドを調べて、関連する set... メソッドを使用してコンテンツを更新する必要があります。
activate は画面ではなくアプリケーションに対して呼び出され、スタックに複数の画面があり、それらすべてを更新する必要があるため、これには少し問題があります。更新するために自分自身を登録するか、 activate() メソッドがディスプレイスタックで画面を検索します。
しかし、おそらく簡単な方法は、各画面の「onExposed()」メソッドを使用してコンテンツを自動的に更新することです。このメソッドは、画面が非表示になってから表示されるたびに呼び出されます。これは、アプリケーションがフォアグラウンドになった後に発生することとまったく同じです。また、別の画面がその上に押されたり、ユーザーがメニュー キーを押したりして、画面が非表示になった場合にも発生します。そのため、更新に時間がかかる場合 (たとえば、データベース ルックアップが必要な場合) は、 onExposed() が呼び出されるたびに更新するのではなく、更新頻度を制限することをお勧めします。
この「onExposed()」アプローチは、各フィールドのコンテンツを個別に更新するという要件から抜け出すことはできませんが、実装が容易になる可能性があります。
さらにアップデート
ネイトの答えに注意してください。ネイトは Android と BB の両方の経験があるため、問題によりよく関連付けることができます。
しかし、画面が更新されたことがわかっている場合は、その画面のコンテンツに関連するネットワーク要求を処理したばかりなので、各フィールドを個別に調べて、その時点で更新された値を「設定」する必要があります。 onExposed() の使用について心配する必要はありません。これに対応する 1 つの設計アプローチは、画面の構成を画面の人口から分離することです。これにより、複数の場所から「人口」を呼び出すことができます (フィールドを更新するときは、イベント スレッドにいる必要があることに注意してください)。
ただし、この状況では、新しい Screen を作成してそれをプッシュし、古い画面 (古い値を持つ) をポップする方が簡単かつ迅速に処理できる場合があります。