在android中的Fragments之间进行通信的最佳结构是什么?

时间:2017-12-13 09:57:47

标签: android callback fragment communication

当一个Activity中有一些不同的片段时,片段之间的通信最好和更安全的方法是什么? 我使用callback但是我通过构造函数传递它,现在我遇到了一些崩溃 我认为null callbacks是导致崩溃的原因,当应用程序在后台运行,然后用户返回应用程序时,回调为空。
有一个很大的问题,当我在Activity中有很多片段时,在Activity中实现回调是一种困难和混乱的方式。
我已经测试了EventBus,但我的目的只是一个片段,它有点苛刻,也可能是片段需要从父片段获取数据。 你知道更好的方法吗? my structure
我有很多片段A,B,C,....更新片段A时,我也想更新片段B,对于其他片段也是如此,更新片段C,D也应该更新等等。
如果我想使用接口,我应该写很多接口。还有其他建议吗?

3 个答案:

答案 0 :(得分:1)

您可以使用Bundle课程。

 Bundle args = new Bundle();
 args.putString("my_value", "hello world");
 Fragment1 fragment1 = new Fragment1();
 fragment1.setArguments(args);

在另一个接收值的片段中:

String requiredValue = getArguments().getString("my_value");

答案 1 :(得分:0)

if (getActivity() instanceof YourActivityName)
{
       ((YourFragment2Name)getActivity()).variable);
}

//确保YourFragment2Name中的变量应该是公共的。

答案 2 :(得分:0)

一切都取决于您的预期情况。

public class MyFragment extends Fragment {

    interface FragmentCallback {
       void onClickButton(MyFragment fragment);
    }    

    private FragmentCallback mCallback;

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            mCallback.onClickButton(this);
        }
    }
}

对于接口通信请检查

public class MainActivity extends AppCompatActivity implements MyFragment.FragmentCallback {

    //onCreate



    @Override
    public void onClickButton(MyFragment fragment) {
       // Do your Task
    }
}

活动

CACHES = {
    # Set default cache to FallbackCache
    'default': {
        'BACKEND': 'cache_fallback.FallbackCache',
    },
    # Your production main cache (Redis, for example)
    'main_cache': {
        'BACKEND': 'redis_lock.django_cache.RedisCache',
        'LOCATION': redis_url,
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        },
        'TIMEOUT': 500,
    },
    # Use dummy cache to ignore main cache errors and get data from DB
    'fallback_cache': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    }
}