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

And*_*ine 1 android android-intent android-context android-activity

嗨,我有一个名为BaseActivity的活动,它扩展了Activity.从这里我必须去菜单按钮按下扩展的SettingsActivityPreferenceActivity.要启动a AsyncTask,这是一个独立的类,我需要一个实例BaseActivity.我怎样才能获得一个BaseActivity实例SettingsActivity

有什么办法,例如:

intent.putExtra("activity_instance",BaseActivity.this);
Run Code Online (Sandbox Code Playgroud)

Rub*_*ban 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;
    }   

}       
Run Code Online (Sandbox Code Playgroud)

在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         


               }

            }
Run Code Online (Sandbox Code Playgroud)

在SettingsActivity中这样做

 Class SettingsActivity extends Activity{

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            CommonModelClass commonModelClass = CommonModelClass.getSingletonObject();



            Activity instanceBaseActivity=  commonModelClass.getbaseActivity();;


       }

    }
Run Code Online (Sandbox Code Playgroud)

如果有效,请打勾