2

我的项目有一个名为 MainActivity 的活动和一个 BrowserActivity 扩展对话服务。

MainActivity 将在应用程序启动时意图 BrowserActivity。

我想BrowserActivity可以访问MainActivity的公共方法。

类似的东西: 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 绑定并使用服务或实现接口。

服务 | 安卓开发者

于 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 回答
0

我有同样的问题。我找到了部分解决方案。

关键是Activity是Context的子类。

您将参数传递Context给对话框的构造函数,对吗?

大多数人通过使用thisof来传递它MainActivity

所以,我使用以下代码来获取MainActivity参考。

private MainActivity getMainActivity()
{
    Context c= getContext();
    if( c instanceof MainActivity)
    {
         return (MainActivity)c;
    }
    return null;
}

然后您可以通过以下方式调用所需的方法

this.getMainActivity().chooseShare(intent);

在对话框中。

我对此进行了测试,并且可以正常工作!

希望对您或前辈有所帮助。

(刚才看到最后修改日期)

于 2018-04-10T16:37:27.190 回答