2017-02-27 8 views
-1

mPosデバイスがBluetoothに接続されているかどうかを実際に示すレイアウトを表示するライブラリを作成しています。接続コードはライブラリにあり、接続コールはMainActivityから開始されます。AndroidでMainActivity Contextを使用するだけでレイアウトを表示する方法

問題はここから始まります:私はいくつかのレイアウトを表示したい、または私のライブラリのレイアウトを定義したいと思います。 thisまたはのコンテキストをマイライブラリに渡すことはできます。

私のライブラリコードを使用すると、ライブラリなしで接続を行うことができますを教えないでくださいActivity クラス

からの継承ではないことを明確にします。ライブラリ内にレイアウトを表示するだけで、それを削除(プル)したいので、主なアクティビティが表示されます。これは何かにする必要があります。NavigationController

+0

[mcve]を追加すると、助けになるかもしれません。 –

答えて

0

ライブラリクラスに静的メソッドを作成します。コンテキストオブジェクトを作成し、静的メソッドを使用してコンテキストを受け入れ、それに応じて設定します。このライブラリを最初に呼び出すときは、まずこのメソッドを呼び出し、その後でコードのどこにでもコンテキストオブジェクトを使用できます。ヒントは、コンテキストが静的であると宣言しないと、メモリリークが悪化します。

+0

私はすでにコンテキストを持っています。レイアウトを表示し、そのコンテキストを使用してレイアウトを削除する方法がポイントです。申し訳ありませんが、私はあなたのためにこれを与えることはできません。 –

+0

そう、継承されていないクラスからレイアウトを操作したいのですか? – Remario

1

あなたはこれを間違った方法で見ていると思います。

[マイプロジェクト] - 開始 - > [アクティビティ]と[マイプロジェクト]はアクティビティのすべてを処理していると考えています。

実際、OS(Android)はアクティビティ(自分のプロジェクトクラスではない)しか実行できないため、アクティビティからのメッセージを処理する[アクティビティ] - 開始 - > [マイプロジェクトサービス]である必要があります。

プロジェクトがこのように設定されていると、(アクティビティの場合と同様に)レイアウトを通常どおりに表示できます。既存のプロジェクトクラスは依然としてすべての決定を下すことができます。逆の順序で開始されます。

これは、クロスプラットフォームアプリケーション(例:libgdx)で使用されている概念と同じです。アプリケーションは、共通コードを実行するネイティブラッパー(アクティビティ)です。

編集:

あなただけの方法は、独自のクラスで呼び出されたときの活動の中で何かをトリガしたい場合は、あなたがコールバックインタフェースを使用することができます。

public interface OnConnectionMadeListener { 
    void onConnectionMade(); 
} 

あなたのアクティビティを実装することができますそれあなたのオブジェクトの内部次に

public class MainActivity extends Activity implements OnConnectionMadeListener { 

    private View mOverlay;   

    public void onCreate() { 
      ... 
      mOverlay = findViewById(R.id.overlay); 
      mOverlay.setVisibility(View.GONE); 
      new MyConnectionObject(this); //this will be your class that has the madeConnection() method 
    } 

    ... 

    public void onConnectionMade() { 
     //show the overlay 
     mOverlay.setVisibility(View.VISIBLE); 
    } 

} 

public class MyConnectionObject { 

    private OnConnectionMadeListener mCallback; 

    public MyConnectionObject(OnConnectionMadeListener callback) { 
     ... 
     mCallback = callback; 
    } 

    public void madeConnection() { 
     ... 
     if (mCallback != null) { 
      mCallback.onConnectionMade(); 
     } 
    } 
} 
+0

あなたが考えていることではありません。 MainActivityをアニメーションで表示するだけで、私の呼び出しがpublicになったときの表示を開始する必要があります。madeConnection(){ /* MainActivity Context Here */ } 何らかの方法でメインアクティビティがmakeConnectionメソッドを呼び出して接続しますレイアウトは表示されますが、定義されているmakeConnectionメソッドはアクティビティクラスから継承されません。 –

+0

あなたの質問には遠隔ではありません。その場合は、コールバックを使用する必要があります。私は私の答えを編集します。 –

+0

これを実行する方法を教えてもらえますか?以前はiOSでこれをやっていました。ちょうど私がiOSで実行することができますが、私はどのようにAndroidでこれを達成するかわからないビューを持つことによって。私の問題を理解してくれてありがとう。 –

1

あなたが言ったように、その方法ではコンテキストがあります。システム・レベル・アラートを使用すると、そのアクティビティーについて完全なウィンドウ・レイアウトを表示できます。あなたのアクティビティは、そのアラートのホストになりますが、以下で実行し続けますが、システムのアラートビューが画面を占有していたため、ユーザーはそれを見ることができません。 https://stackoverflow.com/a/21182403/2105241

PS:

これは、文脈と警告を表示することができる方法です。システムアラートを使用すると良い解決策ではありません。

関連する問題