首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用一个接口管理多个片段

用一个接口管理多个片段
EN

Stack Overflow用户
提问于 2017-05-01 17:05:12
回答 2查看 514关注 0票数 2

我有一个活动和三个片段。应用程序启动,片段1可见。我点击一个按钮。该片段通过以下接口与活动通信,并启动片段2:

代码语言:javascript
复制
public OnClickedListener listener;

static interface OnClickedListener{
    public void buttonClicked(View v);
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);

    Activity a;

    if (context instanceof Activity){
        a=(Activity) context;
        this.listener = (OnClickedListener)a;
    }
}

..。

playBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.buttonClicked(v); } });

我的MainActivity实现了Fragment1.OnClickedListener,接收数据并启动片段2。

现在我在片段2中。我想点击一个按钮并启动片段3。我知道我可以通过在片段2中实现另一个接口来实现这一点,然后与活动通信,并说“嗨,启动片段3”。所以现在我的活动是这样的

MainActivity implements Fragment1.OnClickedListener,Fragment2.OnClickedListener

这很好,但假设我有20个碎片。我不希望在我的主要活动中实现20个接口。是否有一种方法来创建和使用单个接口在每个单独的片段和活动之间进行通信。这将如何实施?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-01 17:21:46

你可以的。只创建一个接口(我建议您在一个单独的文件中创建它):

代码语言:javascript
复制
interface OnClickedListener {
    void buttonClicked(Fragment fragment, View v);
}

当单击一个onButtonClicked()时,Fragment方法也接受Button实例:

代码语言:javascript
复制
playBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // You can't use just "this", pass the class instance.
        listener.buttonClicked(MyFragmentClassName.this, v);
    }
});

在您的Activity中,您将得到这样的结果:

代码语言:javascript
复制
public class MainActivity extends Activity implements MainActivity.OnClickedListener {
    @Override
    public void buttonClicked(Fragment fragment, View v) {
        // Check if the Fragment instance, or tag, or the info that you use to recognize it.
    }
}
票数 0
EN

Stack Overflow用户

发布于 2017-05-01 17:32:05

在活动或单独文件中创建一个嵌套接口,而不是在片段中创建嵌套接口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43723134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档