воссоздать вид фрагмента с помощью кнопки

У меня есть FragmentActivity, который показывает правильный фрагмент, используя ViewPager. Я добавил Fragment 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>

EDIT добавил private ArrayList<Fragment> fragments в FragmentActivity и перенес код для управления представлением в дополнительный refreshMethod, смотрите вперед. Все работает нормально, если я нажимаю только на первый или второй фрагмент (индекс 0 и 1). В противном случае я получаю IndexOutOfBoundsException. Как инициализировать и заполнить ArrayList?


person lis    schedule 01.07.2013    source источник
comment
См. : ( stackoverflow.com/questions/13626956/)   -  person Bouchehboun Saad    schedule 01.07.2013