2011-05-01 105 views
6

右键我有一个登录按钮位于每个活动的完全相同的地方,我现在有20个活动,但会很快升高很多,而且我并不想成为复制和粘贴相同的代码到每个活动,所以我正在寻找一个简单,高效的解决方案来处理onClick事件,这将在整个应用程序的全球工作。多个活动上的相同按钮

例如,如果用户A单击活动1上​​的登录按钮并登录,它将显示他已在活动2和3中登录等等,直到他们注销为止。

登录按钮具有在整个应用程序,它是“@ + ID /签到”同一ID

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

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

+1

纯粹出于好奇,为什么你的应用需要20个完全相同的按钮? – 2011-05-01 15:07:50

+0

因为每个活动的顶部都有一个标题栏,其中包含徽标和用户名等 – 2011-05-01 16:21:15

+0

是否有一个原因,您不能只使用相同的活动并替换标题栏(或替换徽标和用户名)为每一个onCreate()? – 2011-05-02 16:51:40

回答

8

你不能避免在实现你所有的活动,该侦听器以两种方式。但是你可以做一个有点更有组织的方式:

你可以写你的应用程序(/res/layout/header.xml)自定义标题布局,在其中您有一个点击监听器中的“登录”按钮(指向onSignInClicked法):

android:onClick="onSignInClicked" 

然后你包含这个头给每个活动布局:

<include android:id="@+id/header" layout="@layout/header" /> 

你也可以创建一个包含一个onSignInClicked方法声明的接口,并通过所有的Activiti在实施该界面时,您可以强制他们定义方法的正文。

你居然在那里做什么也可以被包装成

  • 一个静态方法全球 访问类的内部,或
  • 一个良好的参数化方法内 您Application扩展类。

所以在所有的活动中这种方法可以是:

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

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

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

<application android:name=".MyApplication" [...] 
+0

不客气,很高兴你能做到! :) – rekaszeru 2011-05-02 10:50:54

相关问题