未从导入的库中调用继承的Activity方法

时间:2018-01-18 16:13:57

标签: java android inheritance

我试图通过学习创建共享代码/活动/组件库等来提高我的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>

1 个答案:

答案 0 :(得分:1)

您遗失了setContentView中的DashboardActivity。如果没有布局膨胀,则无需显示任何内容。我还建议将您的基类作为抽象,并提供抽象方法。