0

Activityを拡張しないクラスからActivityクラスによって提供される関数を呼び出すにはどうすればよいですか?理論的には、はい、アクティビティを拡張しないと、アクティビティによって提供される機能を直接使用することはできません。しかし、これに対する回避策はありますか?そうでない場合、これらの機能の代替または代替方法はありますか?

たとえば、クラスがActivityを拡張する場合、setContentView()レイアウトxmlファイルをインスタンス化するために呼び出すことができます。しかし、私のクラスが他のクラスを拡張し、Activityを拡張しない場合は、LayoutInflaterを使用してタスクを実行できます。しかし、他の関数のようなものはregisterReceiver()どうですか?他のクラスから''の機能を取得するにはどうすればよいですかregisterReceiver()。もちろん、そのようなすべてのクラスでActivityを拡張する必要はありません。Activity.function_nameこれらの関数は静的ではないため、「」による静的アクセスもできません。

特定のサービスにはどこからでもアクセスできます。たとえば、' println()'またはLog.e()、システム関数は、必要なときにいつでもどこからでも呼び出すことができます。他の重要な機能についても同様の方法はありますか?

結論:

コンテキストを宛先クラスに渡します。ただし、一部の関数にアクセスするには、渡されたコンテキストをアクティビティに型キャストする必要があります。

ChangdeoとBTの両方の答えは正しいです。

ありがとう。

4

2 に答える 2

2

理由を明示するドキュメントは見つかりませんでしたが、これを行う必要がある場合は常に、Activity「s」を渡すだけContextで十分です。

任意の関数に渡されたContext呼び出しcontextActivityの場合、以下により、必要なこれらのメンバー関数にアクセスできます。

((Activity) contextActivity).<anyMemberFunction>

または、これらの関数が複数の場合に必要な場合は、次の操作を行うのが最も簡単な場合があります。

Activity myActivity = (Activity) contextActivity;

そこから、次をActivity使用して、いつでもこれらのメンバー関数にアクセスできます。

myActivity.<desiredFunction>;

私が述べたように、これが機能しないケースは見つかりませんでしたが、これが常に機能することを示す確かなドキュメントもありません。これは私が一貫して使用しているのを見たトリックです。誰かがさらに追加する必要がある場合は、行ってください。

于 2013-01-05T09:44:46.510 に答える
1

例の場合

Class XYZActivity extends Activity
{
   ......
    ......
    MyClass myClass = new MyClass(this);
    // OR you can pass just context
    // MyClass myClass = new MyClass(getContext());
}

Class MyClass
{
  Context context;
  Myclass(Context context)
  {
   this.context = context;
   context.registe....//Or any function 
   }
}
于 2013-01-05T09:36:08.973 に答える