У меня есть HostActivity
, который использует ViewPager
и TabLayout
для переключения между несколькими фрагментами.Когда я переключаюсь между вкладками, экземпляр Fragments действительно получает обновленные данные.Я также вижу обновленные данные в onCreateView
экземпляра Fragment
, но TextView.setText
не обновляется.Когда я проверяю видимость Fragment
, он всегда показывает Невидимый.Как сделать фрагмент видимым при переключении вкладок, чтобы представление обновлялось новыми данными?Чего-то не хватает в жизненном цикле фрагмента / действия?Я впервые использую ViewPager
, поэтому будет полезно узнать, что я что-то упустил.
Класс фрагмента:
public class StepFragment extends Fragment { @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (getArguments() != null) {
step = getArguments().getParcelable(SELECTED_STEP);
mDescription = step.getDescription();
}
View view = inflater.inflate(R.layout.step_fragment, container, false);
ButterKnife.bind(this,view);
Log.e(TAG, "onCreateView: "+mDescription); **// THIS GETS UPDATED DATA**
tvStepDescription.setText(mDescription);
}
return view;
}
}
Вот моя активность хоста:
public class StepActivity extends AppCompatActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_step);
fragmentSelectAdapter = new StepFragmentSelectAdapter(getSupportFragmentManager(),this,steps,recipe);
mViewPager.setAdapter(fragmentSelectAdapter);
mTabLayout.setupWithViewPager(mViewPager);
stepFragment = (StepFragment) getSupportFragmentManager().findFragmentById(R.id.step_container);
if(stepFragment == null) {
stepFragment = StepFragment.newInstance(step, recipe);
stepFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction()
.add(R.id.step_container, stepFragment)
.commit();
} else {
stepFragment = StepFragment.newInstance(step, recipe);
stepFragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction()
.replace(R.id.step_container, stepFragment)
.commit();
}
}
}
Вот мой FragmentPagerAdapter
, который, кажется, получает правильные данные в соответствии с положением вкладки в методе getItem:
public class StepFragmentSelectAdapter extends FragmentPagerAdapter {
...
@Override
public Fragment getItem(int position) {
**// THIS GETS UPDATED DATA**
Log.e(TAG, "getItem: \nDecr: "+steps.get(position).getDescription()+"\nVideo: "+steps.get(position).getVideoURL()+"\nImage: "+steps.get(position).getThumbnailURL());
return StepFragment.newInstance(steps.get(position),recipe);
}
@Override
public int getCount() {
if (steps == null){
return 0;
}
return steps.size();
}
...
}