2013-04-15 2 views
0

У меня есть приложение, которое реализует ActionBarSherlock, в основном состоящее из ViewPager с различным содержимым фрагментов (для каждой страницы) с индикатором ViewPager.Как сохранить состояние фрагментов в ViewPager при изменении ориентации

Вот мой OnCreate Метод деятельности, которая простирается SherlockFragmentActivity

// Assume that tabs,sources,types are string arrays e.g. tabs = ["tab1","tab2","tab3"] 
// types = ["listview","listview","webview"] 
// according to the type of each tab, the type of content of the fragment associated to that tab is determined (e.g. WebView or ListView) 
@Override 
public void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 
super.setContentView(R.layout.main); 

srcContext = getBaseContext(); 
srcActivity = SaudiActivity.this; 

int selectPos = 0; 


Intent sender = getIntent(); 

FragmentPagerAdapter mAdapter = new NewsListAdapter(
      getSupportFragmentManager()); 
ViewPager pager = (ViewPager) findViewById(R.id.pager); 
pager.setAdapter(mAdapter); 

TabPageIndicator indicator = (TabPageIndicator) findViewById(R.id.indicator); 
    indicator.setViewPager(pager); 
    pager.setOffscreenPageLimit(tabs.length); 
    pager.setCurrentItem((tabs.length - 1)); 
    currentPosition = (tabs.length - 1); 

    indicator.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 
      currentPosition = position; 
      if ((type[position] == "listview" || type[position] 
        .equals("listview")) && loaded[position] == false) { 
       loaded[position] = true; 
       getNews(listViews[position], position); 
      } 
     } 

     @Override 
     public void onPageScrolled(int position, float positionOffset, 
       int positionOffsetPixels) { 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 
     } 
    }); 

    getSupportActionBar().setCustomView(R.layout.logo); 
    getSupportActionBar().setDisplayShowCustomEnabled(true); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
    getSupportActionBar().setDisplayShowTitleEnabled(false); 
    getSupportActionBar().setDisplayShowHomeEnabled(false); 

    Context ctx = getSupportActionBar().getThemedContext(); 

    SourcesAdapter adapter = new SourcesAdapter(ctx, 
    R.layout.navigation_list_item, src_name, icons, src_value); 

} 

Вот мой Список новостей адаптер (который создает фрагменты),

public static class MyViewHolder { 
    public TextView title; 
    public ImageView icon; 
} 

class NewsListAdapter extends FragmentPagerAdapter { 

    public NewsListAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return new NewsFragment(MyActivity.this, position); 
    } 

    // This is the number of pages -- 5 
    @Override 
    public int getCount() { 
     return tabs.length; 
    } 

    // This is the title of the page that will apppear on the "tab" 
    public CharSequence getPageTitle(int position) { 
     return tabs[position]; 
    } 

} 

public List<NewsItem> NewsItems; 

Наконец, вот мой NewsFragment:

public static class NewsFragment extends Fragment { 

    private int position; 

    public NewsFragment() { 
    } 

    public NewsFragment(Context ctx, int pos) { 
     this.position = pos; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 

    Bundle savedInstanceState) { 
     View view = null; 
     if (type[position].equals("listview")) { 
      // Put a ListView in the Fragment 
     } else { 
      // Put a WebView in the Fragment 
     } 
     return view; 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
    } 
} 

ответ

2

Позвольте фрагменту обрабатывать его состояние путем переопределения onSa veInstanceState и размещение необходимых значений в outState. Восстановите это состояние в onCreateView с помощью savedInstanceState. Также я уверен, что если вы используете фрагменты Actionbarsherlock, вам нужно расширить фрагмент «Шерлок», а не «Фрагмент».

Смежные вопросы