常见片段侦听器的建议方法

时间:2014-01-24 15:31:20

标签: android android-fragments listener

对于片段 - 活动通信,this是建议的方法,通过使用监听器。

在我的情况下,我有两个片段和一个按钮,我希望他们在按下时做同样的事情。

我应该创建一个Activity实现的单独的侦听器类,然后在每个片段中实例化一个侦听器,还是有一个我不知道的更好的设计?

修改

对不起,我可能没有正确地沟通。我不是在寻找片段之间的沟通。我有一个带有buttonA的片段A和带有buttonB的片段B.当我点击buttonA时,我的Activity中有一个监听器,并调用方法doSomething()。现在我想要buttonB调用doSomething()。我应该A)创建第二个监听器并让活动实现它,B)创建一个单独的监听器类并将其用于两者或C)更好的选择??

3 个答案:

答案 0 :(得分:0)

用于片段到片段之间的通信或用于通过事件进行片段通信的活动。例如,有很少的选择。我知道this otto eventbus。可以找到有关此内容的教程Here或只是google它。

答案 1 :(得分:0)

从文档中可以看出:

  

两个碎片不应该直接通信。

因此,您最好遵循文章中解释的模式,并通过片段附加的活动进行沟通。 当从片段A调用侦听器时,从fragmentManger

获取片段B.
 YourFragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_b); 
 fragment.doSomething();

答案 2 :(得分:0)

我正在使用这种模式,它对我很有用:

public class Fragment1 extends Fragment {
    FragmentListener mCallback;

    public interface FragmentListener {
        public void onAction1();
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        if (activity instanceof FragmentListener) {
            mCallback = (FragmentListener) activity;
        }
    }

    public void onAction2() {
        // do your stuff...
    }
}

public class Fragment2 extends Fragment {
    FragmentListener mCallback;

    public interface FragmentListener {
        public void onAction2();
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        if (activity instanceof FragmentListener) {
            mCallback = (FragmentListener) activity;
        }
    }

    public void onAction1() {
        // do your stuff...
    }
}

public class MainActivity implements Fragment1.FragmentListener, Fragment2.FragmentListener {
    private Fragment1 fragment1;
    private Fragment2 fragment2;

    /**
     * Listening to events from first fragment and forwarding to second fragment
     */
    @Override
    public void onAction1() {
        fragment2.onAction1();
    }

    /**
     * Listening to events from second fragment and forwarding to first fragment
     */
    @Override
    public void onAction2() {
        fragment1.onAction2();
    }
}

活动从片段中侦听“事件”,如果需要,将其转发给其他片段。