多个活动上的相同按钮

Tom*_*m O 7 android global android-activity

对,我有一个登录按钮,位于每个活动的同一个地方,我现在有大约20个活动,但很快就会上升很多,我真的不想复制并粘贴相同的代码到每个活动,所以我正在寻找一个简单,有效的解决方案来处理onClick事件,该事件将在整个应用程序中全局工作.

例如,如果用户A单击活动1上​​的登录按钮并登录,则会显示他已登录活动2和3,依此类推..直到他们退出为止.

登录按钮在整个应用程序中具有相同的ID,即"@ + id/signIn"

在每个活动开始时调用单个函数会更容易吗?我认为这不会是每次有效使用处理能力等?!

任何建议和/或指导将不胜感激.谢谢 :)

rek*_*eru 10

您无法避免以任何方式在所有活动中实现该侦听器.但是你可以用更有条理的方式做到这一点:

您可以为应用程序(/res/layout/header.xml)编写自定义标题布局,其中您具有"登录"按钮,其中包含单击侦听器集(指向onSignInClicked方法):

android:onClick="onSignInClicked"
Run Code Online (Sandbox Code Playgroud)

然后,将此标头包含在每个活动布局中:

<include android:id="@+id/header" layout="@layout/header" />
Run Code Online (Sandbox Code Playgroud)

您还可以创建一个包含onSignInClicked方法声明的接口,并通过实现该接口的所有活动强制它们定义onSignInClicked方法的主体.

你实际在那里做的也可以包装成

  • 全局可访问类中的静态方法,或
  • Application扩展类中的一个参数化方法.

所以在你的所有活动中,这个方法可以是:

public static void onSignInClicked(View view)
{
    // static method with call with reference to the current activity
    SignInHelper.doSignIn(this);
}
Run Code Online (Sandbox Code Playgroud)

要么

public static void onSignInClicked(View view)
{
    // global method in your `Application` extension
    // with reference to the current activity
    ((MyApplication)getApplicationContext()).doSignIn(this);
}
Run Code Online (Sandbox Code Playgroud)

如果您选择第二种方式,请不要忘记androidManifes.xml通过设置标记的name属性来更新application:

<application android:name=".MyApplication" [...]
Run Code Online (Sandbox Code Playgroud)