使用TabLayout在同一片段的不同实例之间进行通信

时间:2015-12-31 15:17:13

标签: android android-fragments android-tablayout

我正在使用TabLayout和ViewPager在我的应用中显示标签。我只有两个标签。这两个选项卡使用相同的片段(不同的实例),每个片段中都有一个回收器。每个回收商都会显示不同的数据。

在我的FragmentPagerAdapter中,我这样做:

 @Override
    public Fragment getItem(int position) {
        Bundle bundle = new Bundle();
        if (position == 0) {
            bundle.putString(TreinamentosFragment.EXTRA_TIPO, TreinamentosFragment.TIPO_PENDENTE);
        } else {
            bundle.putString(TreinamentosFragment.EXTRA_TIPO, TreinamentosFragment.TIPO_CONCLUIDO);
        }

        Fragment fragment = new TreinamentosFragment();
        fragment.setArguments(bundle);
        return fragment;
    }

通过这种方法,我能够在运行时知道每个片段的类型 并在Web服务中获取正确的信息以显示。

但问题是,当用户在Fragment A中并以某种方式与其中一个回收器项进行交互时,我从适配器中删除了这个项目,我需要将此项放在Fragment B的适配器中。我这样做?如何恢复Fragment B的特定实例并更改其适配器?

我想在不使用任何事件总线的情况下这样做。

我的片段A和B已经在另一个片段中,因为我也使用了导航抽屉。

2 个答案:

答案 0 :(得分:1)

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>org.apache.openejb</groupId>
    <artifactId>openejb-core</artifactId>
    <version>4.7.2</version>
    <scope>provided</scope>
</dependency>

答案 1 :(得分:0)

您需要使用Singleton数据类。

https://en.wikipedia.org/wiki/Singleton_pattern

您有2个适配器,那么您需要两个Singleton Data类。当您从Fragment-A中删除项目时,请在Frag-B s Singleton Data instance. As Fragment-B resume/visible the just reload data from Frag-B的Singleton Data实例中添加该已删除的项目。

无事件总线解决方案.. :)

public class SingletonDemo {
    private static volatile SingletonDemo instance = null;
    private SingletonDemo() { }

    public static synchronized SingletonDemo getInstance() {
        if (instance == null) {
            instance = new SingletonDemo();
        }

        return instance;
    }
}