0

Привет У меня есть деятельность с именем BaseActivity, которая расширяет активность. из этого я должен перейти к SettingsActivity, который продлевает PreferenceActivity, при нажатии кнопки меню. Чтобы запустить AsyncTask, который находится в независимом классе, мне нужен экземпляр BaseActivity. Как я могу получить экземпляр BaseActivity в SettingsActivity?Как передать экземпляр действия в другую деятельность

есть ли способ, как, например:

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

андроид не разрешил использовать aim.putExtra ("activity_instance", BaseActivity.this); то, что я ожидаю, отправляет экземпляр активности, где вокруг вызова startActivity – AndEngine

+1

посмотрите на документы, чтобы узнать причину http://developer.android.com/reference/android/content/Intent.html «puExtra» methonds – Raghunandan

+0

, что будет вы делаете с экземпляром BaseActivity? – Vivart

ответ

4

Используйте геттеры и сеттеры и создайте класс, в котором они находятся, одиночный класс.

Это одноэлементно class.Using этот класс можно обмениваться данными (например: INT, логический, экземпляр активности ... и т.д.) во всем классе.

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();; 


     } 

    } 

пожалуйста дайте клеща, если это работает

+0

Я чувствую, что использование одноэлементного класса - хороший подход среди всех. Я использую этот вариант, и он работает для меня. !! – AndEngine

+1

Это замечательно. Если вы хотите очистить (сделать экземпляр null) значение значения Singleton класса commonModelClass.clear(); .Когда ваш код будет более эффективным (вся ссылка, которую имеет класс singleton, будет собираться мусором). Но убедитесь, что вы вызываете этот метод только тогда, когда вся ваша работа выполнена иначе, вы потеряете свое значение. – Ruban

+0

Эй, хорошо. Я искал часы, чтобы назвать главную функциональность в моем вспомогательном классе - теперь он РАБОТАЕТ отлично - Большое вам спасибо! –

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 
+0

не работает. выдает ошибку «Невозможно использовать« это »в статическом контексте» – AndEngine

+0

Отредактировано код ..check it –

+2

Это нехороший подход. Избегайте использования статических экземпляров. – alicanbatur

0

Вы путаете деятельность с объектами класса. Созданный моментный класс активности подчиняется всем правилам жизненного цикла активности, что важно, система может убить эту деятельность в любое время. Таким образом, вы должны проектировать действия таким образом, чтобы они не зависели от другого экземпляра активности вообще, а приводили только результаты. вы можете написать вспомогательный класс и вызвать его снова и снова, если хотите. если не использовать хранилища, такие как sdcard или preference или sandbox, для хранения информации и получения ее из другой активности. Если вы хотите сохранить некоторые из этих данных в памяти, тогда класс подкласса Application и сохраните их на уровне приложения.

Смежные вопросы