1

BlackBerry Java で「Android Intent」に相当するものを理解しようとしています。これと同様の質問/回答を読みましたが、使用できませんでした。1つの提案は方法を持つことでした

public class StatusActivity extends MainScreen {

    String strResult;
    String strsessionFirstName;

    public void setResult(String value) {
        strResult = value;
    }
    public void setFirstName(String value) {
        strsessionFirstName = value;
    }

のようなメインクラスから呼び出されます

if(strResult.equals("credentialaccepted"))
{
    StatusActivity nextScreen = new StatusActivity();
    nextScreen.setFirstName(strsessionFirstName);

しかし、これは私にとってはうまくいきません。を使用する他のオプションHashtable、私は理解できませんでした。誰でもサンプルコードで説明できますか? ありがとう。

4

1 に答える 1

2

この質問に対する私たちの回答をすでにご覧になっていると思いますか? そうでない場合は、最初にそれを読んでください。

バックグラウンド

BlackBerry はIntentオブジェクトを使用せず、直接同等のものはありません。Android では、Intentさまざまな理由でオブジェクトが使用されます。

  1. 単に開始するにはActivity
  2. の呼び出し元をそれ自体Activityから切り離すActivity
  3. ActivityAndroid がオブジェクトのライフサイクル (作成/一時停止/再開/破棄) を管理できるようにします。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サブクラスにあるロジックをScreenBlackBerry のサブクラスに入れています。コントローラーのロジックと UI をより密接に結び付けますが、許容できる場合もあります。

これに慣れている場合は、多くの場合、次のような単純なコードで画面 (アクティビティ) を起動します。

StatusActivity nextScreen = new StatusActivity();
nextScreen.setFirstName(strsessionFirstName);
UiApplication.getUiApplication().pushScreen(nextScreen);

エクストラを検査し、ビューをセットアップするためにAndroidActivityがメソッドに持つロジックは、 . UI の初期化の一部が の値に依存する場合は、メソッド内でその UI をセットアップできます。onCreate()IntentStatusActivitystrsessionFirstNamesetFirstName()

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);
   }
}

または、firstNameStringStatusActivityコンストラクターに渡してからセットアップすることもできます。

別の解決策

上でリンクした他の質問でスミスさんが提案していたのは、キーと値のペアでプロパティを設定する、すべての 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);
于 2012-07-11T07:22:22.430 に答える