Я полагаю, что в вашем MainActivity есть ViewPager
, а FragmentOne
будет одним из фрагментов внутри пейджера представления. Здесь MainActivity связывается с FragmentOne, чтобы обновить адаптер. Надежда понятна.
В вашем MainActivity добавить этот интерфейс:
public interface Updateable {
public void update();
}
реализовать этот интерфейс в виде фрагмента, который должен быть обновлен, и написать код для уведомления адаптера внутри update
метода:
public class FragmentOne extends Fragment implements MainActivity.Updateable {
...
@Override
public void update() {
// YOUR CODE TO UPDATE HERE, FOR EXAMPLE, HERE I'M UPDATING THE ADAPTER
if (adapter != null) {
adapter.notifyDataSetChanged();
} else {
Log.d("LOG_TAG", "null");
}
}
...
}
Вызовите метод update
из MainActivity, когда сначала загрузится фрагмент. Вы можете сделать это переопределение метода getItemPosition
в вашем PagerAdapter
, как это:
@Override
public int getItemPosition(Object object) {
if (object != null && object instanceof FragmentOne) {
FragmentOne f = (FragmentOne) object;
f.update();
}
return super.getItemPosition(object);
}
Наконец, вы должны вызвать notifyDataSetChanged() вашего адаптера ViewPager. Это заставит адаптер вашего viewpager вызвать метод getItemPosition.
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
int previousState;
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
if (previousState == ViewPager.SCROLL_STATE_SETTLING && state == ViewPager.SCROLL_STATE_IDLE) {
if (viewPagerAdapter.getItem(viewpager.getCurrentItem()) instanceof Pictures) {
Log.d("LOG_TAG", "New Position=" + viewpager.getCurrentItem());
viewPagerAdapter.notifyDataSetChanged();
}
}
previousState = state;
}
});
У меня тоже был один и тот же сценарий, и я использовал одноплодный шаблон для решения, и я нашел, что это лучше, чем данные, проходящих между фрагментами, которые очень дорогостоящая задачей – arjun
I не знаете вашу точную проблему, но подумали ли вы использовать интерфейсы между фрагментами (и использовать их внутри OnPageChangeListener)? –
Да, это дорого и слишком сложно реализовать этот общий интерфейс в деятельности, фрагменты, просмотрщик и бла-бла-бла. подумайте о том, что вам нужно изменить приоритет шагов или добавить дополнительные шаги между шагами. – saber