我的项目有一个名为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上启动。 谢谢你。
答案 0 :(得分:1)
如果它在同一个项目中,您应该可以使用getParent()
。
Activity parent = getParent();
if (parent instanceof MainActivity)
((MainActivity)parent).chooseShare(i);
另一种选择是将其与ibinder绑定并使用服务或实现接口。
答案 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();
}