Articles of inheritance

从父级获取子类名

我有一个基类用于我的所有活动( ActivityBase ),它本身派生自android.app.Activity 。 在onCreate中,我想基于当前正在执行的子类执行一些条件逻辑。 如果SomeCustomActivity和AnotherCustomActivity都扩展了ActivityBase ,我如何在父类( ActivityBase )中确定哪两个是当前正在执行的?

Android视图的ID是否可以在多个活动中安全共享?

假设我在Android应用程序EditPerson和EditEmployee有两个活动。 将EditPerson Activity作为EditPerson活动的基类似乎很自然,并定义了将数据EditEmployee布局中定义的视图的方法。 EditPerson Activity的实现会将(姓名)字段从EditText元素中推出(例如)。 EditEmployee版本将调用基类版本,然后编组自己的专业领域(比如税号等)。 为了便于共享代码,两个活动都必须有一个布局资源,该资源定义了一对或多对共享相同ID的EditText元素。 即在layout\edit_person.xml会有: <EditText android:id="@+id/name_editor" /> 然后在layout\edit_employee.xml会有这样的: <EditText android:id="@+id/name_editor" /> <EditText android:id="@+id/tax_id_editor" /> <!– etc. –> 由于“员工”是一个“人”,并有共同的字段(通过inheritance编组),似乎分配的id(上面的例子中的“name_editor”)只在一个范围内是唯一的活动(或布局?)。 从我的testing,这似乎工作,但我有点偏执,会有一个无意的副作用,这种方法和使用不明确的布局元素ID。 任何人都可以证实这是一个安全的做法和/或指出它将如何最终炸毁我的申请? 有没有人做过类似的事情?

Android中的活动之间的inheritance

我无法将inheritance的概念应用于Android活动 – 例如。 ActivityA extends Activity , ActivityB extends ActivityA ,然后如果我使用ActivityB启动,则两个 Activities(A然后是B)的onCreate()方法被调用。 我的问题是,在典型的Java中,来自ActvityA的onCreate应该被覆盖 – 但是onCreate相当于作为构造函数行事,尽pipe它是一个函数。 Android中的inheritance是如何工作的, 与其他的function,如onPause(),onResume等? 编辑:我也注意到,ActivityA可能有许多抽象方法在其onCreate()中提供的定义在ActivityB中提供。 这个怎么用 ?

Android:如何从自定义视图的超类中获取属性

我有一个具有TextView的自定义视图。 我做了一个方法,返回TextView的resourceID 。 如果没有定义文本,则默认返回-1。 我也有一个从视图Ainheritance的自定义视图B 我的自定义视图有文字“hello”。 当我调用该方法来获取超类的属性时,我将返回-1。 在代码中,还有一个我能够如何检索值的例子,但是感觉有点儿怪异。 attrs.xml <declare-styleable name="A"> <attr name="mainText" format="reference" /> </declare-styleable> <declare-styleable name="B" parent="A"> <attr name="subText" format="reference" /> </declare-styleable> A类 protected static final int UNDEFINED = -1; protected void init(Context context, AttributeSet attrs, int defStyle) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.A, defStyle, 0); int mainTextId = getMainTextId(a); a.recycle(); if (mainTextId […]

Android:扩展Linearlayout,但需要RelativeLayout。 重复的代码不可避免?

我有这个代码: public class CopyOfLinearLayoutEntry extends LinearLayout implements Checkable { private CheckedTextView _checkbox; private Context c; public CopyOfLinearLayoutEntry(Context context) { super(context); this.c = context; setWillNotDraw(false); } public CopyOfLinearLayoutEntry(Context context, AttributeSet attrs) { super(context, attrs); this.c = context; setWillNotDraw(false); } @Override protected void onDraw(Canvas canvas) { Paint strokePaint = new Paint(); strokePaint.setARGB(200, 255, 230, 230); strokePaint.setStyle(Paint.Style.STROKE); strokePaint.setStrokeWidth(12); […]

如何从MonkeyDeviceinheritance?

我想扩展monkeyrunner API的MonkeyDevice类。 我的派生类看起来像这样。 from com.android.monkeyrunner import MonkeyDevice, MonkeyRunner class TestDevice(MonkeyDevice): def __init__(self, serial=None): MonkeyDevice.__init__(self) self = MonkeyRunner.waitForConnection(deviceId=serial) self.serial = serial 当我从另一个模块调用test_dev = TestDevice(serial) ,出现以下错误: test_dev = TestDevice(serial) TypeError: _new_impl(): 1st arg can't be coerced to com.android.monkeyrunner.core.IMonkeyDevice 我究竟做错了什么? 提前致谢!

如何在Android上的SQLite数据库中实现“inheritance”关系

考虑这个简单的模型: 基本位置表: +——————————-+ | Locations | +——————————-+ |(PK) _id Integer Autoincrement | | name Text(100) Not null | | is_in_range Integer | +——————————-+ 而更专业的表格称为WifiLocation: +——————————-+ | wifi_location | +——————————-+ | ssid Text(0) Not null | | signal_threshold Real | |(PK) _id Integer | +——————————-+ 我希望这个模型将代表从WifiLocationinheritance的BaseLocation 。 所以我在wifi_locations表的_id列上添加了一个REFERENCES子句: CREATE TABLE wifi_locations (_id Integer primary key references […]

Android – 如何强制子代覆盖有代码的父代方法

这里的情况 – >想象有3个类,我想做一些类似的: public class GameObject { public void updateBounds() { // do something } } public abstract class Enemy extends GameObject { public abstract void updatePosition(){ //<– this will not compile, //but this is what i want to do, to force //child to override parent method updateBounds(); } } public class Minion extends Enemy […]

可传递的inheritance:抽象类 – 哪个CREATOR?

我有一个实现Parcelable的抽象类A 我有一个Bclass和一个Cclass,都是Aclass。 我怎样才能让它们可以被翻阅? 因为我可以链接它,并提供一个CREATOR在A和B如许多职位build议。 但是因为我有其他的存储ABC类和实现Parcelable自己的对象,这种方法似乎没有工作,因为当我想要传递一个ArrayList我将不得不使用types列表中的CREATOR ArrayList<A> elements = new ArrayList<>(); in.readTypedList(elements , B.CREATOR); // B.CREATOR? C.CREATOR??? 这显然没有意义。 那我该如何正确地制作一个可以分类的东西呢? 也就是说,我想让这个类Parcelable,所以我可以用一个普通的方式来引用A. 一个) public abstract class A implements Parcelable { final String globalVar; public A(String globalVar) { this.globalVar = globalVar; } } B) public class B extends A { String bVar; public B(String global, String bVar) { super(global); […]

抽象类作为parcelable

基本上,我有我的应用程序中的以下结构: 没有抽象类ProjectItem就可以直接实现这样的结构,但在这种情况下,我不知道如何实现这个。 抽象类ProjectItem需要一个CREATOR因为它应该是可分段的。 (如in.readTypedList(mProjectItems, ProjectItem.CREATOR);在构造函数Project(Parcel in)中 但实际上,出于逻辑的原因, CREATOR只能在派生类中实现。 那么,如何实现这个结构才能保持类Project可见性? 编辑 这是Project的构造函数之一: private Project(Parcel in) { in.readTypedList(mProjectItems, ProjectItem.CREATOR); } 但正如我已经说过的, ProjectItem不应该实现一个CREATOR