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