你使用的是错误的方法。解决方案需要比您想象的更多的工作。正确的方法是:
首先,要意识到活动A和活动B(以及任何其他活动)这些活动是特定于您的应用程序的活动,并且您希望在它们之间建立直接通信。
其次,要意识到您正在尝试获取当前(或以前)活动的上下文。上下文将有助于提供参考。
第三,您可以通过扩展所需的类来创建自己的Activity和Application类。 Application类是用于活动的低级类。
从这里,您将能够使用getApplicationContext(),它将返回您的自定义Application类。
设计:您必须在CustomApplication类内部跟踪对所需活动的引用。从那里你要做的就是将getApplicationContext()强制转换为CustomApplication类,然后调用访问Activity的方法。如果要访问您为其“类型”创建的特定活动的某些实例,则必须转换您的活动。例如:
MapsActivity mact = (MapsActivity)(((MyApplication)(this.getApplicationContext())).getCurrentActivity())
您当然必须注意,必须已创建此活动(已调用onCreate方法)才能返回当前活动。当然,对于活动的其他生命周期方法也是如此,因为您将创建一个baseActivity来处理这些,并且您还将拥有一个应用程序生命周期来帮助处理这个问题。
回答这个问题:“如何在android中获取当前的前台活动上下文?”我转向StackOverflow并找到了用户:gezdy的回答正是我所需要的: 如何获取android中的当前前台活动上下文? 。
(开始报价来自:盖泽迪)
您应该管理活动参考。添加名称 应用程序在清单文件中: <application android:name=".MyApp" .... </application> 你的申请类: public class MyApp extends Application { public void onCreate() { super.onCreate(); } private Activity mCurrentActivity = null; public Activity getCurrentActivity(){ return mCurrentActivity; } public void setCurrentActivity(Activity mCurrentActivity){ this.mCurrentActivity = mCurrentActivity; } } 创建一个新的活动: public class MyBaseActivity extends Activity { protected MyApp mMyApp; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mMyApp = (MyApp)this.getApplicationContext(); } protected void onResume() { super.onResume(); mMyApp.setCurrentActivity(this); } protected void onPause() { clearReferences(); super.onPause(); } protected void onDestroy() { clearReferences(); super.onDestroy(); } private void clearReferences(){ Activity currActivity = mMyApp.getCurrentActivity(); if (this.equals(currActivity)) mMyApp.setCurrentActivity(null); } } 所以,现在不要为您的活动扩展Activity类 扩展MyBaseActivity。现在,您可以从中获取当前的活动 应用程序或活动上下文: Activity currentActivity = ((MyApp)context.getApplicationContext()).getCurrentActivity();
您应该管理活动参考。添加名称 应用程序在清单文件中:
<application android:name=".MyApp" .... </application>
你的申请类:
public class MyApp extends Application { public void onCreate() { super.onCreate(); } private Activity mCurrentActivity = null; public Activity getCurrentActivity(){ return mCurrentActivity; } public void setCurrentActivity(Activity mCurrentActivity){ this.mCurrentActivity = mCurrentActivity; } }
创建一个新的活动:
public class MyBaseActivity extends Activity { protected MyApp mMyApp; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mMyApp = (MyApp)this.getApplicationContext(); } protected void onResume() { super.onResume(); mMyApp.setCurrentActivity(this); } protected void onPause() { clearReferences(); super.onPause(); } protected void onDestroy() { clearReferences(); super.onDestroy(); } private void clearReferences(){ Activity currActivity = mMyApp.getCurrentActivity(); if (this.equals(currActivity)) mMyApp.setCurrentActivity(null); } }
所以,现在不要为您的活动扩展Activity类 扩展MyBaseActivity。现在,您可以从中获取当前的活动 应用程序或活动上下文:
Activity currentActivity = ((MyApp)context.getApplicationContext()).getCurrentActivity();
(报价结束:盖泽迪)
注意:所有代码都是用java编写的。