【问题标题】:Define onClick Method in other class在其他类中定义 onClick 方法
【发布时间】:2014-01-03 02:23:58
【问题描述】:

使用 xml,我可以定义一个 onClick 方法,如果我点击视图就会调用该方法:

android:onclick="onClick"
public void onClick(View v)

该方法必须在Activity类中定义,可见。现在我有许多具有不同 onClick 方法的控件。这使得 Activity 类很混乱,那么有没有办法在其他类中定义这个方法呢?

当然,我可以在类本身中使用不同的类或 onClickListener,但使用 xml 非常简单。 onClickListeners 带有一些“未使用的代码”,因为 Java 目前没有 lamda 表达式,这也让人感到困惑。我认为 xml 是一种快速而清晰的方法,但如果您目前有这么多方法,则不是。

【问题讨论】:

  • 你在这里指的是什么其他类?
  • 只需使用一键式方法并检查视图 ID 以了解单击的视图

标签: android onclicklistener android-xml


【解决方案1】:

查看源代码,它看起来一定是类中的一个方法,该类扩展了创建 View 的 Context 类:

http://androidxref.com/4.4_r1/xref/frameworks/base/core/java/android/view/View.java#3780

查看这一行:

getContext().getClass().getMethod( ... )

正在 getContext() 上进行反射

您可以按照其他答案的建议进行操作,打开视图 ID,并调用其他类中的函数。或者,如果您的应用程序很复杂,也许将您的布局划分为片段?

【讨论】:

    【解决方案2】:

    我不完全确定你想要什么,但你可以使用不同的方法名称,它不必是“onClick”

    除此之外,我相信他们确实必须参与该活动。

    【讨论】:

      【解决方案3】:

      在托管该布局的 Activity 上调用 XML 中定义的任何 onClick 方法。如果您真的想这样做,您可以将所有传入的点击转发到另一个类,但最好的方法是 OnClickListener 或为每个按钮使用不同的 onClick 方法名称。

      【讨论】:

        【解决方案4】:
        make activity implement onclick listener and implement the method like below.
        
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            int key  = v.getId();
            switch (key) {
            case R.id.message_field:
                    // handle click
        
                break;
        
            default:
                break;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-02
          • 1970-01-01
          • 1970-01-01
          • 2019-03-05
          • 2021-09-21
          相关资源
          最近更新 更多