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)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           8524 次  |  
        
|   最近记录:  |