Android 访问父活动';对话框中的方法

Android 访问父活动';对话框中的方法,android,Android,我的项目有一个名为MainActivity的活动和一个BrowserActivity扩展对话框服务 MainActivity将启动应用程序上的intent Browser活动 我想浏览Activity可以访问MainActivity的公共方法 诸如此类: 活动的方法: public void chooseShare(Intent intent) { try { startActivityForResult( intent , PICK_SHARE); }

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

MainActivity将启动应用程序上的intent Browser活动

我想浏览Activity可以访问MainActivity的公共方法

诸如此类: 活动的方法:

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

}
我想在BrowserActivity上做些什么: (伪代码)

我尝试这样做:

MainActivity ma = new MainActivity();
ma.chooseShare(i);
但是,它不工作,它抛出NULLPointerException

因为我需要
startActivityForResult()
而不是
startActivity()
来获得回调结果

我在SOF上搜索,我发现
startActivityForResult()
应该在
Activity
上启动,而不是
对话框


谢谢。

如果在同一个项目中,您应该能够使用
getParent()

Activity parent = getParent();
if (parent instanceof MainActivity)
    ((MainActivity)parent).chooseShare(i);
另一种选择是将其与ibinder绑定,并使用服务或实现接口


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

关键是活动是上下文的一个子类。

您将
上下文
参数传递给对话框的构造函数,对吗

大多数人通过使用
main活动的
this
来传递它

因此,我使用以下代码获取
MainActivity
reference

private MainActivity getMainActivity()
{
    Context c= getContext();
    if( c instanceof MainActivity)
    {
         return (MainActivity)c;
    }
    return null;
}
然后,您可以通过以下方式调用所需的方法:

this.getMainActivity().chooseShare(intent);
在对话框中

我测试了这个,它工作了

希望它能帮助你或预测者


(我刚才看到了最后一次修改日期)

您可以像这样访问所有类方法:

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


}

你不能这样做。您应该将该方法写入
BrowserActivity
类。对于AppCompativeActivity,两者都不适用!
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();


}