【问题标题】:Write a method just once and access it in "android:onClick" everywhere in the application只需编写一次方法,然后在应用程序的任何地方的“android:onClick”中访问它
【发布时间】:2012-04-09 06:49:12
【问题描述】:

我的应用程序中有一个标题栏。并且标题栏有一个按钮。单击该按钮时,我会显示信息活动。现在,据我所知,android:onClick 需要在 Activity 中引用公共方法,该方法在 setContentView() 中设置了 xml。现在,由于该按钮单击的逻辑在整个应用程序中都是相同的,所以我想要的是,我将方法只说一次 showInfoScreen(View view) 并将其放入该按钮 onClick 属性中。而且我不需要到处写相同的方法。有可能吗?

【问题讨论】:

  • 用Static关键字写一个全局方法,并用它的类名访问它

标签: android onclick android-xml


【解决方案1】:

当然可以。写一个Activity 类,然后让你所有的Activitys 扩展它。例如:

public abstract class BaseActivity extends Activity {

    @Override
    public void setContentView( int layoutResID ) {

        super.setContentView( layoutResID );
        findViewById(R.id.button).setOnClickListener(new OnTitleBarButtonClickListener());
    }

    private void showInfoScreen() {

        // Show the info screen
    }

    private class OnTitleBarButtonClickListener implements OnClickListener {

        @Override
        public void onClick(View v) {

            showInfoScreen();
        }
    }
}

那么所有派生的Activitys 将扩展BaseActivity 而不是Activity

这样做的好处在于,任何扩展此类的Activity 都会自动获得此功能。派生类中不需要编码,只需在BaseActivity 中。您所有Activitys 的唯一合同将是拥有R.id.button 或您在其内容中命名的任何ID。

【讨论】:

  • 更简单 - 只需使用 BaseActivity 实现 View.OnClickListener。这样您就不必拥有私有内部类,也不必实例化它。您只需在BaseActivity 中实现覆盖的onClick(...) 方法。另外,除非你真的需要,否则不要在 onStart() 中查找视图 - 而是在 onCreate(...) 中查找视图,这样更有效。
  • @MisterSquonk 我没有这样做,因为我希望派生类能够实现OnClickListener,而不必调用它,如果它已经在BaseActivity 中实现,那么它是超级的。给派生类更多的感觉,与实现 Activity 相比没有什么不同。
  • @MisterSqonk 在onStart() 中查找视图效率低下是什么?我不在onCreate() 上这样做的原因是,如果在派生类中首先调用超级,那么setContentView() 还不会被调用,它会抛出一个NullPointerException
【解决方案2】:

我认为您必须在要显示信息屏幕的每个 Activity 中写入 onclick

但是OnClick 你只是在每个Activity 中调用A 方法showInfoScreen(View view)....

你应该创建类 Like...ShowInfo 并且有一个静态方法...

public class ShowInfo{

 public static void showInfoScreen(View view,Context c){
  //now dispay info here 
}
}

在您的onClick() 方法中写入ShowInfo.showInfoScreen(v,YourClassName.this)....

【讨论】:

    【解决方案3】:

    Vinayak.B 建议的示例如下:

        public class yourAppUtils {
    
        public static void yourMethod() {
            // Do stuff
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      相关资源
      最近更新 更多