2

私のプロジェクトには、MainActivity という名前のアクティビティと、BrowserActivity 拡張ダイアログ サービスがあります。

MainActivity は、アプリケーションの起動時に BrowserActivity を意図します。

BrowserActivity が MainActivity の public メソッドにアクセスできるようにしたいと思います。

そのようなもの: MainActivity のメソッド:

public void chooseShare(Intent intent)
{
    try
    {
        startActivityForResult( intent , PICK_SHARE);
    } catch (android.content.ActivityNotFoundException ex)
    {
        Log.e("Share" , ex.getMessage());
    }

}

そして、私は BrowserActivity でやりたい: (疑似コード)

((MainActivity)BrowserActivity.this.getOwnerActivity()).chooseShare(intent);

私はそれをしようとします:

MainActivity ma = new MainActivity();
ma.chooseShare(i);

ただし、動作せず、NULLPointerException がスローされます。

コールバック結果startActivityForResult()の代わりに必要だからです。startActivity()

そして、SOF を掘り下げたところ、startActivityForResult()で開始する必要があることがわかりましActivityたが、 ではありませんDialog

ありがとうございます。

4

3 に答える 3

1

getParent()同じプロジェクト内であれば使用できるはずです。

Activity parent = getParent();
if (parent instanceof MainActivity)
    ((MainActivity)parent).chooseShare(i);

別のオプションは、それをibinderにバインドし、サービスを使用するか、インターフェースを実装することです。

サービス | Android デベロッパー

于 2013-09-12T07:11:27.647 に答える
1

次のようにすべてのクラスのメソッドにアクセスできます。

Context context;

public ProceedDialog(@NonNull Context context) {
    super(context);
    this.context = context;
    //do something
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   //do something


}

@Override
public void onClick(View view) {

      ParentActivity activity = (ParentActivity)context;
      activity.method();


}
于 2019-09-21T16:29:47.893 に答える