2016-12-24 2 views
0

Я хочу добавить поддержку вращения экрана для деятельности, имеющей представление пейджера. то, что я хочу, когда пользователь меняет ориентацию экрана, вкладка открытого вида пейджера должна открываться в новой ориентации. но теперь активность перезапускается и каждый раз открывается первая вкладка. любезно помогите мне. Заранее спасибо.Как сохранить состояние представления пейджера с поворотом экрана

package com.example.ali.namallibrary; 
import android.app.Fragment; 
import android.content.Context; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import java.io.Serializable; 

public class aboutLibrary extends AppCompatActivity { 

CustomAdapter customAdapterpter = null; 
TabLayout tabLayout; 
ViewPager viewPager; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_about_library); 
    customAdapterpter = new CustomAdapter(getSupportFragmentManager(),getApplicationContext()); 

    viewPager = (ViewPager) findViewById(R.id.viewPager); 
    viewPager.setAdapter(customAdapterpter); 

    tabLayout = (TabLayout) findViewById(R.id.tabBar); 
    tabLayout.setupWithViewPager(viewPager); 
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 
    }); 
} // end of oncreate 

private class CustomAdapter extends FragmentPagerAdapter { 
    private String[] fragmentNames = {"About","Collection","Timing","Contact"}; 
    public CustomAdapter(FragmentManager supportFragmentManager, Context applicationContext) { 
     super(supportFragmentManager); 
    } 
    @Override 
    public android.support.v4.app.Fragment getItem(int position) { 
     switch (position) 
     { 
      case 0 : 
       return new aboutLibraryFrag(); 
      case 1 : 
       return new libraryCollectionFrag(); 
      case 2 : 
       return new libraryTimingFrag(); 
      case 3 : 
       return new contactUsFrag(); 
      default: 
       return null; 
     } 
    } 
    @Override 
    public int getCount() { 
     return fragmentNames.length; 
    } 
    @Override 
    public CharSequence getPageTitle(int position) { 
     return fragmentNames[position]; 
    } 
} 

ответ

0

Всякий раз, когда вы поворачиваете экран, деятельность полностью разрушается и воссоздается. Чтобы справиться с этим, существует метод жизненного цикла, называемый onSaveInstanceState. В этом методе вы можете сохранить объект Bundle. A Bundle - это группа ключевых пар значений, которую вы определяете, которую вы хотите после вращения. В этом Bundle вы можете сохранить текущую позицию вашего пейджера. Я не очень много работал с ViewPagers, но getCurrentItem может быть тем, что вы ищете. Вам нужно будет сделать ViewPager переменной-членом и константой для ключа. Тогда я предполагаю, что это будет выглядеть примерно так:

public void onSaveInstanceState(Bundle savedInstanceState) { 
    // Save the user's current game state 
    savedInstanceState.putInt(CURRENT_POSITION_KEY, mViewPager.getCurrentItem()); 

    // Always call the superclass so it can save the view hierarchy state 
    super.onSaveInstanceState(savedInstanceState); 
} 

Метод onCreate принимает Bundle savedInstanceState - если деятельность перегружается от вращения, этот параметр будет иметь все, что вы сохранили в onSaveInstanceState. Таким образом, вы можете сделать что-то подобное в onCreate:

// Check whether we're recreating a previously destroyed instance 
if (savedInstanceState != null) { 
int currentPos = savedInstanceState.getInt(CURRENT_POSITION_KEY); 
mViewPager.setCurrentItem(currentPos) 
} 

Более подробную информацию о загрузке и сохранении состояния между поворотами можно найти здесь: https://developer.android.com/guide/components/activities/activity-lifecycle.html#saras

+0

благодаря @Lyla ... его полезным ... теперь я получил идея... –

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