3

我在 xml 布局文件中声明了许多按钮,并将此布局用于片段。

按钮 android:id="@+id/button1" android:onClick="onClickButton"/>
按钮 android:id="@+id/button2" android:onClick="onClickButton"/>
……
按钮 android:id="@+id/buttonN" android:onClick="onClickButton"/>

令人失望的是,“onClickButton”事件在主机活动中被捕获,而不是在我的片段中。当然,在我的片段中,我可以手动解决这个问题,如下所示:

    @覆盖
    public View onCreateView(LayoutInflater inflater, ViewGroup 容器,
            捆绑保存的InstanceState){

    查看视图 = inflater.inflate(R.layout.fragment_content, container, false);

    按钮 button1 = (Button) view.findViewById(R.id.button1);
    button1.setOnClickListener(...);

    ... ETC

    按钮 buttonN = (Button) view.findViewById(R.id.buttonN);
    buttonN.setOnClickListener(...);

是否有任何明确的方法来处理片段中的 onClickbutton 事件?

4

3 回答 3

6

您提到的方法是标准的方法:

 Button buttonN = (Button) view.findViewById(R.id.buttonN);
 buttonN.setOnClickListener(...);

只需让您的 Fragment 实现 OnClickListener 然后您就可以将其设置为监听所有按钮

Button buttonN = (Button) view.findViewById(R.id.buttonN);
buttonN.setOnClickListener(this);
于 2013-05-15T23:41:20.413 回答
1

不幸的是,在代码中这样做是仅使用 Android SDK 时的唯一方法。

你有没有尝试过定制的东西?AndroidAnnotationsRoboGuice使它不那么冗长。

于 2013-05-15T23:42:14.653 回答
0

唔。有趣的。我从不尝试这些代码。这只是一个理论。我在其他情况下经常使用这个 OnClickListener。

=====================

如果按钮具有不同的 id,它们可以使用相同的 OnClickListener。这很容易。

一个 OnClickListener 可以调用另一个 OnClickListener。

像这样...

OnClickListener other;
OnClickListener demo = new OnClickListener() {
    void onClick(View v) {
        if(other != null)other.onClick(v);
    }
}

所以,在你的 Activity 中设置一个 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);
        }
    }
};

这个模块应该做你想做的。也许修复一些代码。

于 2019-10-04T09:58:43.823 回答