您好我有一个名为 BaseActivity 的活动,它扩展了活动。
从此我必须按菜单按钮,转到 SettingsActivity 扩展PreferenceActivity
。要启动AsyncTask
,这是一个独立的类,我需要一个BaseActivity
的实例。如何在BaseActivity
中获得SettingsActivity
个实例?
有什么方法, 例如:
intent.putExtra("activity_instance",BaseActivity.this);
答案 0 :(得分:5)
使用getter和setter并将它们作为singleton类存放。
这是一个单例类。使用这个类,我们可以在全班共享数据(例如:int,boolean,activity instance ...等)。
public class CommonModelClass
{
public static CommonModelClass singletonObject;
/** A private Constructor prevents any other class from instantiating. */
private Activity baseActivity;
public CommonModelClass()
{
// Optional Code
}
public static synchronized CommonModelClass getSingletonObject()
{
if (singletonObject == null)
{
singletonObject = new CommonModelClass();
}
return singletonObject;
}
/**
* used to clear CommonModelClass(SingletonClass) Memory
*/
public void clear()
{
singletonObject = null;
}
public Object clone() throws CloneNotSupportedException
{
throw new CloneNotSupportedException();
}
//getters and setters starts from here.it is used to set and get a value
public Activity getbaseActivity()
{
return baseActivity;
}
public void setbaseActivity(Activity baseActivity)
{
this.baseActivity = baseActivity;
}
}
在BaseActivity类中,这样做。
Class BaseActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
CommonModelClass commonModelClass = CommonModelClass.getSingletonObject();
commonModelClass.setbaseActivity(BaseActivity.this);
//after using the BaseActivity instance dont forget to call commonModelClass.clear(); else it wont be garbage collected
}
}
在SettingsActivity中这样做
Class SettingsActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
CommonModelClass commonModelClass = CommonModelClass.getSingletonObject();
Activity instanceBaseActivity= commonModelClass.getbaseActivity();;
}
}
如果有效,请打勾
答案 1 :(得分:0)
在“基本活动”中创建一个静态上下文
public class BaseActivity extends Activity{
public static Context ctxt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ctxt = BaseActivity.this
}
}
并在您的“PreferenceActivity”活动中使用这种方式
BaseActivity.ctxt
答案 2 :(得分:0)
您将活动与类对象混淆。片刻活动类被实例化它遵守所有活动生命周期规则,重要的是系统可以随时杀死此活动。因此,您必须以这样的方式设计活动,使其根本不应依赖于另一个活动实例,而只是驱动结果。如果你愿意的话,你可以写一个帮助类并一次又一次地调用它。如果不使用sdcard或preference或sandbox等存储来存储信息并从其他活动中检索它。如果要将这些信息保留在内存中,请将Application类子类化,并将它们保留在应用程序级别。