1

アプリケーションを起動すると、最初のアクティビティは TabsActivity で、これは FragmentActivity で、このアクティビティには ViewPager があり、左または右にスライドしてフラグメントを変更できます。

しかし、デバイスを回転させると、現在のフラグメントが適切に表示され、フラグメントを変更するとリストがいっぱいにならず、もう一度変更するとリストが正しくいっぱいになります。

ここに私の TabsActivity があります

public class TabsActivity extends SherlockFragmentActivity implements SearchView.OnQueryTextListener   {    
    private static ArrayList<String> CONTENT = new ArrayList<String>();

    private boolean refreshActivity = false;
    private boolean isConnected = true;

    private FragmentStatePagerAdapter adapter;
    private ViewPager pager;    


    @Override
    public void onResume(){
        super.onResume();

        refreshActivity();
    }

    @Override
    public void onStart(){
        super.onStart();

        refreshActivity();
    }

    private void refreshActivity(){
        if (refreshActivity == true && isConnected){
            Intent intent = new Intent(this, TabsActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
            startActivity(intent);

            refreshActivity = false;
        }
    }

    protected void onSaveInstanceState(Bundle bundle) {
        bundle.putSerializable("CONTENT", CONTENT);
        super.onSaveInstanceState(bundle);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        File file = new File(getApplicationInfo().dataDir + "/databases/" + EventBDD.NOM_BDD);

        if (!AppStatus.getInstance(this).isOnline(this) && !file.exists()) { 

            isConnected = false;

            setContentView(R.layout.isoffline);
        }else{  

            setContentView(R.layout.tabs_layout);

            final SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext());

            if(savedInstanceState != null) {
                CONTENT = (ArrayList<String>) savedInstanceState.getSerializable("CONTENT");
            }else{              
                /*
                 * Generate tabs menu with preferences
                 */ 
                if (SP.getBoolean("displayConcert",true))
                    CONTENT.add("Concert");
                if (SP.getBoolean("displayConference",true))
                    CONTENT.add("Conférence");
                if (SP.getBoolean("displayTheatre",true))
                    CONTENT.add("Théatre");
                if (SP.getBoolean("displayDanse",true))
                    CONTENT.add("Danse");
                if (SP.getBoolean("displayJeunesse",true))
                    CONTENT.add("Jeunesse");
                if (SP.getBoolean("displayLoisir",true))
                    CONTENT.add("Loisir");
            }

            SP.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener(){
                @Override
                public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
                    refreshActivity = true;                 
                }
            });

            adapter = new TabsAdapter(getSupportFragmentManager());

            pager = (ViewPager)findViewById(R.id.pager);
            TabPageIndicator indicator = (TabPageIndicator)findViewById(R.id.indicator);

            pager.setAdapter(adapter);
            indicator.setViewPager(pager);          
        }
    }


    class TabsAdapter extends FragmentStatePagerAdapter  {

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

        @Override
        public Fragment getItem(int position) {
            return Item.newInstance(CONTENT.get(position % CONTENT.size()));
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return CONTENT.get(position % CONTENT.size());
        }

        @Override
        public int getCount() {
          return CONTENT.size();
        }
    }
}

ありがとう ;)

4

0 に答える 0