如何将Activity实例传递给另一个活动

时间:2014-02-14 06:59:53

标签: android android-intent android-activity android-context

您好我有一个名为 BaseActivity 的活动,它扩展了活动。 从此我必须按菜单按钮,转到 SettingsActivity 扩展PreferenceActivity。要启动AsyncTask,这是一个独立的类,我需要一个BaseActivity的实例。如何在BaseActivity中获得SettingsActivity个实例?

有什么方法, 例如:

intent.putExtra("activity_instance",BaseActivity.this);

3 个答案:

答案 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类子类化,并将它们保留在应用程序级别。