この質問に対する私たちの回答をすでにご覧になっていると思いますか? そうでない場合は、最初にそれを読んでください。
バックグラウンド
BlackBerry はIntent
オブジェクトを使用せず、直接同等のものはありません。Android では、Intent
さまざまな理由でオブジェクトが使用されます。
- 単に開始するには
Activity
- の呼び出し元をそれ自体
Activity
から切り離すActivity
Activity
Android がオブジェクトのライフサイクル (作成/一時停止/再開/破棄) を管理できるようにします。new MyActivity();
では、質問は、これら 3 つの理由のどれ (またはその他の理由) について質問しているのかということです。私の最初の推測は #1 です ... アクティビティを開始できるようになりたいだけです。
まず第一に、BlackBerry にはActivity
. Android には、通常は XML レイアウトで表されるビューView
レイヤーがあり、Androidクラスを拡張するいくつかのカスタム Java クラスを使用する場合があります。
次に、Android には、Model-View-Controller パターンのControllerActivity
に似たレイヤーがあります。はUI (ビュー)と密接に結合されるべきではなく、理想的には、データモデルレイヤー に存在する必要があるバックエンド データを含めるべきではありません。Activity
プログラマーは Model と Controller ( Activity
) コードで作業でき、Java を知らないグラフィカル UI デザイナーは完全に XML (および Layout Editor ツール) でビジュアル デザインを作業できるため、これは非常に便利です。
BlackBerry には、Android のビューレイヤーのようなものはありません。ネイティブの BlackBerry Java プラットフォームとツールを使用している場合、BlackBerry UI を構築するには、Java コードで行う必要があります。そのため、コントローラレイヤをビューレイヤから分離するために懸命に取り組んでいる BlackBerry プロジェクトが少ないことがわかりました。また、Model-View-Controller は、ソフトウェア プロジェクトが大きくなるほど重要になると思います。また、デスクトップ アプリケーションと比較して、スマートフォン アプリは小さいことが多いです。したがって、良くも悪くも、それが MVC が BlackBerry API に直接組み込まれていない理由だと思います。
ワンソリューション
したがって、コード スニペットが示すように、多くの人が AndroidActivity
サブクラスにあるロジックをScreen
BlackBerry のサブクラスに入れています。コントローラーのロジックと UI をより密接に結び付けますが、許容できる場合もあります。
これに慣れている場合は、多くの場合、次のような単純なコードで画面 (アクティビティ) を起動します。
StatusActivity nextScreen = new StatusActivity();
nextScreen.setFirstName(strsessionFirstName);
UiApplication.getUiApplication().pushScreen(nextScreen);
エクストラを検査し、ビューをセットアップするためにAndroidActivity
がメソッドに持つロジックは、 . UI の初期化の一部が の値に依存する場合は、メソッド内でその UI をセットアップできます。onCreate()
Intent
StatusActivity
strsessionFirstName
setFirstName()
StatusActivity.java:
private LabelField _nameLabel;
public void setFirstName(String value) {
if (_nameLabel == null) {
_nameLabel = new LabelField(value);
add(_nameLabel); // add the new field to the screen
} else {
_nameLabel.setText(value);
}
}
または、firstNameString
をStatusActivity
コンストラクターに渡してからセットアップすることもできます。
別の解決策
上でリンクした他の質問でスミスさんが提案していたのは、キーと値のペアでプロパティを設定する、すべての BlackBerry の「アクティビティ」用の汎用インターフェイスを作成することでした。したがって、 を実装する代わりにsetFirstName()
、
StatusActivity.java:
private Hashtable _extras = new Hashtable();
private LabelField _nameLabel;
public void putExtra(String name, Object value) {
_extras.put(name, value);
}
// NOTE: this method is private now, and can only be called from inside this class!
private void setFirstName(String value) {
if (_nameLabel == null) {
_nameLabel = new LabelField(value);
add(_nameLabel); // add the new field to the screen
} else {
_nameLabel.setText(value);
}
}
// this overrides a base class method, and is called with the screen is displayed
public void onUiEngineAttached(boolean attached) {
super.onUiEngineAttached(attached);
if (attached) {
String firstName = _extras.get("first_name");
setFirstName(firstName);
}
}
StatusActivity
次に、次のように開始できます。
StatusActivity nextScreen = new StatusActivity();
nextScreen.putExtra("first_name", strsessionFirstName);
UiApplication.getUiApplication().pushScreen(nextScreen);