2014-04-22 2 views
1

Я попытался создать базовый класс, который создаст строку TAG для каждого Activity, который расширяет ее.Как установить TAG с использованием базового класса?

Так я первый создал abstract класс

public abstract class First extends Activity { 
    static protected String TAG; 

    protected void setTag(Activity activity) { 
     TAG = activity.getClass().getSimpleName(); 
    } 
} 

Затем я создаю класс

public class BaseActivity extends First { 

    @Override 
    protected void setTag(Activity activity) { 
     super.setTag(activity); 
    } 
} 

Base Но как я могу теперь установить, что каждый ACtivity, который расширяет BaseActivity устанавливает переменную TAG со своим собственным простое имя, а не BaseActivity простое имя?

ответ

3

Если я понял правильно, что вы хотите do, это то, что вам нужно:

public class SubActivity extends BaseActivity { 

    @Override 
    protected void setTag(Activity activity) { 
     super.setTag(this); 
    } 
} 

Однако в вашем коде существует большая проблема, ваш абстрактный класс объявляет TAG как статический, поэтому любое новое действие, вызывающее метод setTag, изменит значение TAG в классе «First», что не является чем-то вам может потребоваться, вы можете захотеть сохранить его виртуальным «нестационарным», чтобы каждый созданный объект сохранил свою собственную версию TAG с соответствующим именем класса, назначенного в каждом SubActivity ...

С уважением!

+0

Yup, надо быть осторожным с этими статиками! – Toguard

2

Override onCreate(Bundle savedInstanceState) который является метод, который вы всегда будете звонить, и сделать что-то вроде TAG = this.getClass().getSimpleName();

что-то вроде

public abstract class First extends Activity { 
    protected String TAG; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TAG = this.getClass().getSimpleName(); 
    } 
} 

затем

public class BaseActivity extends First { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //continue normally here, you won't even have to remember to call the method 
    } 
} 
Смежные вопросы