[英]How to catch onclick event in Fragment
我在 xml 布局文件中声明了许多按钮,并将此布局用于片段。
button android:id="@+id/button1" android:onClick="onClickButton"/> button android:id="@+id/button2" android:onClick="onClickButton"/> .... button android:id="@+id/buttonN" android:onClick="onClickButton"/>
令人失望的是,“onClickButton”事件在主机活动中被捕获,而不是在我的片段中。 当然,在我的片段中,我可以手动解决这个问题,如下所示:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_content, container, false); Button button1 = (Button) view.findViewById(R.id.button1); button1.setOnClickListener(...); ... etc Button buttonN = (Button) view.findViewById(R.id.buttonN); buttonN.setOnClickListener(...);
有没有明确的方法来处理 Fragment 中的 onClickbutton 事件?
您提到的方法是执行此操作的标准方法:
Button buttonN = (Button) view.findViewById(R.id.buttonN);
buttonN.setOnClickListener(...);
只需让您的 Fragment 实现 OnClickListener 然后您就可以将其设置为侦听所有按钮
Button buttonN = (Button) view.findViewById(R.id.buttonN);
buttonN.setOnClickListener(this);
不幸的是,在代码中这样做是仅使用 Android SDK 的唯一方法。
你试过一些定制的东西吗? AndroidAnnotations或RoboGuice使其不那么冗长。
唔。 有趣的。 我从不尝试这些代码。 这只是一个理论。 我在其他情况下经常使用这个 OnClickListener。
====================
如果按钮具有不同的 id,则它们可以使用相同的 OnClickListener。 这是容易的部分。
一个 OnClickListener 可以调用另一个 OnClickListener。
像这样...
OnClickListener other;
OnClickListener demo = new OnClickListener() {
void onClick(View v) {
if(other != null)other.onClick(v);
}
}
因此,在您的活动中设置一个 ArrayList。 当 Fragment 创建并附加到 Activity 时,将您的 OnClickListener 放入其中。 当 Fragment 销毁并分离时,删除您的 OnClickListener。
ArrayList<OnClickListener> list = new ArrayList<>();
OnClickListener demo = new OnClickListener() {
void onClick(View v) {
for(OnClickListener demo : list) {
demo.onClick(v);
}
}
};
这个模块应该做你想做的。 也许修复一些代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.