【问题标题】:Pass parameters to method in xml将参数传递给xml中的方法
【发布时间】:2021-02-04 02:58:57
【问题描述】:

我有几个按钮,每个按钮都调用自己的 onClick 函数。这些按钮指示 ScrollView 滚动到特定元素(如目录中的链接)。我有三种方法,每种方法的代码几乎相同;显然,在方法中传递 View 滚动到会更好。

info_page.xml:

<TextView
    ...
    android:onClick="scrollToSetup"
    ... />

<TextView
    ...
    android:onClick="scrollToObjective"
    .../>

<TextView
    ...
    android:onClick="scrollToGameplay"
    .../>

InfoPageActivity.java:

...
public void scrollToSetup(View v) {
    View setupHeader = findViewById(R.id.header_setup);
    scrollView.smoothScrollTo(0, setupHeader.getTop());
}

public void scrollToObjective(View v) {
    View setupHeader = findViewById(R.id.header_objective);
    scrollView.smoothScrollTo(0, setupHeader.getTop());
}

public void scrollToGameplay(View v) {
    View setupHeader = findViewById(R.id.header_gameplay);
    scrollView.smoothScrollTo(0, setupHeader.getTop());
}
...

我不太确定这到底是如何工作的,但希望是这样的:

info_page.xml:

<TextView
    ...
    android:onClick"scrollTo","header_setup"
    ... />

<TextView
    ...
    android:onClick"scrollTo","header_objective"
    ... />
<TextView
    ...
    android:onClick"scrollTo","header_gameplay"
    ... />

和 InfoPageActivity.java:

...
public void scrollToGameplay(View v, View target) {
    scrollView.smoothScrollTo(0, target.getTop());
}
...

有没有人有办法做到这一点,或者指向我可以阅读的文档的指针?非常感谢!

【问题讨论】:

    标签: java android xml android-studio android-layout


    【解决方案1】:

    您可以使用DataBinding 来实现此目的。然后将自定义 Listener 传递给 Binding ,例如,如果您想滚动查看 id(在同一 XML 中)R.id.my_target_view1 您的 xml onClick 方法应该如下所示:

    android:onClick='@{(v) -&gt; listener.scrollToGameplay(v, myTargetView1)}'

    因为在生成Binding时,生成器会将snake_case转换为camelCase

    注意:我的建议可能有点矫枉过正,但我​​认为没有其他方法可以实现这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-21
      • 2011-07-23
      • 2017-01-05
      • 2013-10-04
      • 2013-05-19
      • 2013-02-08
      • 2021-07-19
      • 1970-01-01
      相关资源
      最近更新 更多