Восстановить вид фрагмента с помощью кнопки
У меня есть FragmentActivity, которые показывают правильный фрагмент, используя ViewPager. Я добавил фрагмент StatePagerAdapter в ViewPager. Если я нажимаю кнопку на фрагменте, он должен быть воссоздан (onCreateView должен быть вызван снова). Фрагменты - это статьи, и если пользователь не в сети, я покажу ему "пожалуйста, проверьте подключение к сети" и кнопку для перезагрузки. Кнопка вызвала метод в FragmentActivity, но я не знаю, как это реализовать. Может быть, я могу уничтожить и воссоздать текущий фрагмент?
Здесь важная часть FragmentActivity:
private ArrayList<Fragment> fragments;
protected void onCreate(Bundle savedInstanceState)
{
context = this;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_article_page_slider);
...
pages = datahandler.getCount(...);
viewPager = (ViewPager) findViewById(R.id.articlePager);
PagerAdapter pagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager());
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(startPosition);
fragments = new ArrayList<Fragment>(pages);
}
public void reloadData(View v)
{
// TODO
((ArticlePageFragment)fragments.get(viewPager.getCurrentItem())).refresh();
}
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter
{
public ScreenSlidePagerAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public Fragment getItem(int position)
{
Fragment fragment = new ArticlePageFragment();
Bundle args = new Bundle();
...
fragment.setArguments(args);
fragments.add(position, fragment);
return fragment;
}
public int getCount()
{
return pages;
}
}
и сам фрагмент:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
activity = getActivity();
ViewGroup rootView = (ViewGroup) inflater.inflate(
R.layout.fragment_article_page, container, false);
CacheDataHandler cdh = new CacheDataHandler(activity);
cdh.open();
String htmlData = cdh.loadData();
rootView.findViewById(R.id.btn_reload_article_data).setVisibility(View.GONE);
webView = ((WebView) rootView.findViewById(R.id.articleFragment));
refresh();
...
return rootView;
}
public void refresh()
{
...
if (htmlData == null)
{
rootView.findViewById(R.id.btn_reload_article_data).setVisibility(View.VISIBLE);
webView.loadData(defaultdata,"text/html", "UTF-8");
}
else
{
webView.loadData(htmlData,"text/html", "UTF-8");
}
}
и фрагмент_страница_страница.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<WebView
android:id="@+id/articleFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<Button
android:id="@+id/btn_reload_article_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:onClick="reloadData"
android:text="@string/btn_txt_reload_data"
android:visibility="gone" />
</RelativeLayout>
РЕДАКТИРОВАТЬ добавил private ArrayList<Fragment> fragments
в FragmentActivity и передать код для манипулирования видом refresh
Метод, смотри в будущее. Все отлично работает, если я только нажимаю на первый или второй фрагмент (индекс 0 и 1). В противном случае я получаю IndexOutOfBoundsException
, Как инициализировать и заполнить ArrayList?