从对话框访问父活动的方法

时间:2013-09-12 05:17:52

标签: android

我的项目有一个名为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()应该在Activiy上启动,但不能在Dialog上启动。 谢谢你。

3 个答案:

答案 0 :(得分:1)

如果它在同一个项目中,您应该可以使用getParent()

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

另一种选择是将其与ibinder绑定并使用服务或实现接口。

Services | Android Developers

答案 1 :(得分:0)

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

关键是 Activity是Context的子类。

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

大多数人都使用this的{​​{1}}传递它。

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

MainActivity

然后你可以通过

调用所需的方法
private MainActivity getMainActivity()
{
    Context c= getContext();
    if( c instanceof MainActivity)
    {
         return (MainActivity)c;
    }
    return null;
}

在对话框中。

我测试了这个并且它有效!

希望它能帮助你或者前人。

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

答案 2 :(得分:0)

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

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


}