java - 2 个 onClick() 方法 - 其中一个被忽略
问题描述
我有一个对话框,我想在单击按钮时关闭它。
public class Dialog extends DialogFragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_general, container, false);
ViewGroup group = (ViewGroup) view.findViewById(R.id.root);
View v;
for(int i = 0; i < group.getChildCount(); i++) {
v = group.getChildAt(i);
if(v instanceof Button) {
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getDialog().dismiss();
}
});
}
}
return view;
}
}
好吧,对话框将关闭,所以我的脚本似乎可以工作,但问题在于onClick()
方法。在我的 MainActivity 类中,我还有另一个onClick()
方法可以在单击按钮时播放音频。所以onClick()
类的Dialog
将简单地关闭对话框但不会再播放音频。我不确定,但这可能是因为@Override
但即使我删除@Override
,音频仍然不会播放。
如何同时播放音频并关闭对话框?
解决方案
正如我正确理解的那样。您有 2 个 onClickListener,与 2 个不同的视图相关(我们称它们为 btn1 和 btn2)。因此,当您单击 btn1 时,仅 onClick FOR THIS BTN 将起作用!这是合乎逻辑的正常行为。
所以。当您单击 btn1 时,您也想从 btn2 调用 onClick。你怎么能这样做?只需将代码从 onClick(btn2) 添加到 onClick(btn1)。没关系。
如果您想重构它以不重复某些代码 - 您可以将代码从 onClick2 移动到方法并在 onClick1 和 onClick2 中调用它。
推荐阅读
- sql - 将带有外部应用的 SQL 转换为 LINQ
- node.js - REST API - 如何处理 URIError:发送无效参数时“无法解码参数”
- node.js - 如何为 dart/flutter 加密 aes256 cbc 模式
- git - 从另一个分支更新主分支引用
- python - 打印 n 次由字符串 s2 分隔的字符串 s1 的 Python 函数
- github - 如何解决 Github 中 CODEOWNERS 的问题
- python - 如何在网站上为多个用户运行 Gmail API?
- php - 将 $pdo 从另一个文件传递到 Util.php
- javascript - react.js 最佳方式:在状态更改时显示或隐藏 html 元素
- java - 如何使用 logback 登录到 Linux 上的文件