Распределить данные из текущей деятельности по фрагментам на ней - PullRequest
1 голос
/ 23 марта 2019

У меня есть активность с 2 вкладками / фрагментами. В моей деятельности у меня есть запрос JSON и получить некоторые данные из API. Как я могу распространять данные на мои вкладки, которые содержат фрагменты моей текущей деятельности после получения данных?

Код:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail);

    mInflater = LayoutInflater.from(this);

    queue = Volley.newRequestQueue(this);

    picture = (Picture) getIntent().getSerializableExtra("picture");
    pictureId = picture.getPictureId();

    setUpUI();
    getPictureDetails(pictureId);

    tabLayout = findViewById(R.id.detailtabs);
    viewPager = findViewById(R.id.detailviewpager);
    adapter = new ViewPagerAdapter(getSupportFragmentManager());

    adapter.AddFragment(new FragmentDetails(), "Details");
    adapter.AddFragment(new FragmentReviews(), "Reviews");

    viewPager.setAdapter(adapter);
    tabLayout.setupWithViewPager(viewPager);
}

1 Ответ

0 голосов
/ 23 марта 2019

создайте класс interface, как показано ниже

public interface DataDistributor {
    public void sendData(YOUR_DATA_TYPE data)
}

все ваши fragments должны реализовать это interface как показано ниже

public class YOUR_FRAGMENT extends Fragment implements DataDistributor {
   ...

   @Override
   public void sendData(YOUR_DATA_TYPE data){
       //here you get your distributed data in fragment
   }
}

ваш adapter должен иметьinstances из fragments, что implements DataDistributor interface в форме array или List (я предполагаю, что список имен переменных экземпляра фрагмента как fragments) просто записать ниже method вваш класс adapter и вызов в любое время, когда вы захотите распределить ваши данные по фрагментам (вызвав метод adapter.distibuteData(data) по активности)

public void distributeData(YOUR_DATA_TYPE data){
    if(fragments != null && !fragments.isEmpty()){
        for(Fragment fragment: fragments){
            ((DataDistributor) fragment).sendData(data)
        } 
    }
}
...