如何使用Base类设置TAG?

时间:2014-04-22 21:34:43

标签: java android abstract-class

我尝试创建Base类,它将为每个扩展它的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);
    }
}

但是,我现在如何设置扩展ACtivity的每个BaseActivity都使用自己的简单名称设置TAG变量,而不是BaseActivity简单名称?

2 个答案:

答案 0 :(得分:3)

如果我理解你想做什么,这就是你需要的:

public class SubActivity extends BaseActivity {

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

但是,在您的代码中存在一个很大的可能问题,您的抽象类将TAG声明为静态,因此调用方法setTag的任何新活动都将修改TAG的值" First&#34 ; class,这不是你想要的,你可能想要保持虚拟"非静态"所以创建的每个对象都将使用每个SubActivity中指定的类的正确名称保留自己的TAG版本...

问候!

答案 1 :(得分:2)

覆盖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  
  }
}