我试图通过学习创建共享代码/活动/组件库等来提高我的Java技能。
我的几个应用程序都使用相同的登录屏幕活动和 UI ,因此我尝试构建一个“基础活动”类,以便在我的TestApp中继承我可以快速重用代码。
当应用程序启动时,登录屏幕将显示在BaseLoginActivity
中,但LoginActivity
中的任何内容都未被调用或覆盖。
因此,当我点击登录按钮moveToDesiredIntent
时,只会在BaseLoginActivity
中调用。
所有“Base”类都在Library中,我的Child类在TestApp中。
我已经阅读了有关继承的Google文档,我认为我这样做是正确的。 我从抽象的BaseClasses开始,但后来我会得到空指针或不具体的类。
我从基类继承的正确方法是什么,以便我可以重用代码?
我在共享库中构建了 BaseActivity
public class BaseActivity extends AppCompatActivity {
protected String TAG = getClass().getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
然后我在我的库和我的测试应用程序中构建了BaseLoginActivity
,并继承了LoginActivity
。 BaseLoginActitivy有一个带有onclick监听器集的按钮
BaseLoginActivity
public class BaseLoginActivity extends BaseActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.base_activity_login);
Log.d(TAG, "onCreate:");
Button button = findViewById(R.id.btnLogin);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
moveToDesiredIntent();
}
});
}
protected void moveToDesiredIntent();
}
LoginActivity 这是没有获得方法的活动
public class LoginActivity extends BaseLoginActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate:"
}
@Override
protected void moveToDesiredIntent() {
super.moveToDesiredIntent();
Intent intent = new Intent(this, DashboardActivity.class);
startActivity(intent);
finish();
}
}
最后,当你登录时应该去哪里
BaseDashboardActivity
public class BaseDashboardActivity extends BaseActivity {
}
DashboardActivity
public class DashboardActivity extends BaseDashboardActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
我的TestApplication的清单
<application //...>
<activity android:name=".DashboardActivity" />
<activity android:name=".LoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
我的图书馆清单
<application //....>
<activity android:name=".ui.base.BaseActivity" />
<activity android:name=".ui.shared.BaseLoginActivity" />
<activity android:name=".ui.shared.BaseOnBoardingActivity" />
</application>
答案 0 :(得分:1)
您遗失了setContentView
中的DashboardActivity
。如果没有布局膨胀,则无需显示任何内容。我还建议将您的基类作为抽象,并提供抽象方法。