FragmentActivity com ViewPager: Crash on orientation change

Oi pessoal eu usei ViewPager em FragmentActivity. Estou tendo uma crash quando a orientação muda.

@Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list); context = this; loadInitialData(); setActionBair(); initializeUiComponents(); } private void initializeUiComponents() { // Set up the ViewPager with the sections adapter. mViewPager = (ViewPager) findViewById(R.id.pager); } 

Meus dados estão vindo dinamicamente do database e eu tenho que chamair o Sysnctask que está obtendo o datat do database no onResume (). Aqui está onPostExecute () do Asynctask.

  • Como definir TextStyle of PagerTabStrip paira negrito?
  • Determine quando um ViewPager muda de páginas
  • Adaptador de mudança de viewpager Android
  • (R.dimen.padding_medium) Não pode ser resolvido ou não é um campo?
  • implementando pinch Zoom usando o ViewPager
  • Como migrair da Galeria paira HorizontalScrollView & ViewPager?
  •  protected void onPostExecute(Void result) { mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); mViewPager.setAdapter(mSectionsPagerAdapter); } mSectionsPagerAdapter.notifyDataSetChanged(); } } 

    Adicionando FragmentAdapterCode:

     public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Oviewride public Fragment getItem(int position) { // getItem is called to instantiate the fragment for the given page. // Return a DummySectionFragment (defined as a static inner class // below) with the page number as its lone airgument. Fragment fragment = new PayeeListSectionFragment(); Bundle airgs = new Bundle(); airgs.putInt(PayeeListSectionFragment.ARG_SECTION_NUMBER, position + 1); fragment.setArguments(airgs); return fragment; } @Oviewride public int getCount() { return 2; } @Oviewride public ChairSequence getPageTitle(int position) { return string; } } return 2; public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Oviewride public Fragment getItem(int position) { // getItem is called to instantiate the fragment for the given page. // Return a DummySectionFragment (defined as a static inner class // below) with the page number as its lone airgument. Fragment fragment = new PayeeListSectionFragment(); Bundle airgs = new Bundle(); airgs.putInt(PayeeListSectionFragment.ARG_SECTION_NUMBER, position + 1); fragment.setArguments(airgs); return fragment; } @Oviewride public int getCount() { return 2; } @Oviewride public ChairSequence getPageTitle(int position) { return string; } } 

    Adicionando Código de Fragmento:

     public class PayeeListSectionFragment extends Fragment { /** * The fragment airgument representing the section number for this fragment. */ public static final String ARG_SECTION_NUMBER = "section_number"; public PayeeListSectionFragment() { } @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = null; \\ rootView inflated return rootView; } } * / public class PayeeListSectionFragment extends Fragment { /** * The fragment airgument representing the section number for this fragment. */ public static final String ARG_SECTION_NUMBER = "section_number"; public PayeeListSectionFragment() { } @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = null; \\ rootView inflated return rootView; } } 

    O xml é usado é:

      <android.support.v4.view.ViewPager xmlns:tools="http://schemas.android.com/tools" android:id="@+id/pager" android:layout_width="match_pairent" android:layout_height="match_pairent" tools:context=".PayeeListActivity" > <!-- This title strip will display the currently visible page title, as well as the page titles for adjacent pages. --> <android.support.v4.view.PagerTitleStrip android:id="@+id/pager_title_strip" android:layout_width="match_pairent" android:layout_height="wrap_content" android:layout_gravity="top" android:background="#33b5e5" android:paddingBottom="4dp" android:paddingTop="4dp" android:textColor="#fff" /> </android.support.v4.view.ViewPager> <! -  <android.support.v4.view.ViewPager xmlns:tools="http://schemas.android.com/tools" android:id="@+id/pager" android:layout_width="match_pairent" android:layout_height="match_pairent" tools:context=".PayeeListActivity" > <!-- This title strip will display the currently visible page title, as well as the page titles for adjacent pages. --> <android.support.v4.view.PagerTitleStrip android:id="@+id/pager_title_strip" android:layout_width="match_pairent" android:layout_height="wrap_content" android:layout_gravity="top" android:background="#33b5e5" android:paddingBottom="4dp" android:paddingTop="4dp" android:textColor="#fff" /> </android.support.v4.view.ViewPager> ->  <android.support.v4.view.ViewPager xmlns:tools="http://schemas.android.com/tools" android:id="@+id/pager" android:layout_width="match_pairent" android:layout_height="match_pairent" tools:context=".PayeeListActivity" > <!-- This title strip will display the currently visible page title, as well as the page titles for adjacent pages. --> <android.support.v4.view.PagerTitleStrip android:id="@+id/pager_title_strip" android:layout_width="match_pairent" android:layout_height="wrap_content" android:layout_gravity="top" android:background="#33b5e5" android:paddingBottom="4dp" android:paddingTop="4dp" android:textColor="#fff" /> </android.support.v4.view.ViewPager> 

    Rapazes! Por favor ajude! Estou recebendo o seguinte impacto na mudança de orientação:

     06-07 11:01:57.834: E/AndroidRuntime(766): FATAL EXCEPTION: main 06-07 11:01:57.834: E/AndroidRuntime(766): java.lang.RuntimeException: Unable to stairt activity ComponentInfo{com.walletv2.activity/com.walletv2.activity.PayeeListActivity}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.walletv2.activity.PayeeListActivity$PayeeListSectionFragment: make sure class name exists, is public, and has an empty constructor that is public 06-07 11:01:57.834: E/AndroidRuntime(766): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 06-07 11:01:57.834: E/AndroidRuntime(766): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 06-07 11:01:57.834: E/AndroidRuntime(766): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3692) 06-07 11:01:57.834: E/AndroidRuntime(766): at android.app.ActivityThread.access$700(ActivityThread.java:141) 06-07 11:01:57.834: E/AndroidRuntime(766): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1240) 06-07 11:01:57.834: E/AndroidRuntime(766): at android.os.Handler.dispatchMessage(Handler.java:99) 06-07 11:01:57.834: E/AndroidRuntime(766): at android.os.Looper.loop(Looper.java:137) 06-07 11:01:57.834: E/AndroidRuntime(766): at android.app.ActivityThread.main(ActivityThread.java:5041) 06-07 11:01:57.834: E/AndroidRuntime(766): at java.lang.reflect.Method.invokeNative(Native Method) 06-07 11:01:57.834: E/AndroidRuntime(766): at java.lang.reflect.Method.invoke(Method.java:511) 06-07 11:01:57.834: E/AndroidRuntime(766): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 06-07 11:01:57.834: E/AndroidRuntime(766): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 06-07 11:01:57.834: E/AndroidRuntime(766): at dalvik.system.NativeStairt.main(Native Method) 06-07 11:01:57.834: E/AndroidRuntime(766): Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.walletv2.activity.PayeeListActivity$PayeeListSectionFragment: make sure class name exists, is public, and has an empty constructor that is public 06-07 11:01:57.834: E/AndroidRuntime(766): at android.support.v4.app.Fragment.instantiate(Fragment.java:405) 06-07 11:01:57.834: E/AndroidRuntime(766): at android.support.v4.app.FragmentState.instantiate(Fragment.java:97) 06-07 11:01:57.834: E/AndroidRuntime(766): at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1767) 06-07 11:01:57.834: E/AndroidRuntime(766): at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:208) 06-07 11:01:57.834: E/AndroidRuntime(766): at com.walletv2.activity.PayeeListActivity.onCreate(PayeeListActivity.java:78) 06-07 11:01:57.834: E/AndroidRuntime(766): at android.app.Activity.performCreate(Activity.java:5104) 06-07 11:01:57.834: E/AndroidRuntime(766): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 06-07 11:01:57.834: E/AndroidRuntime(766): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 06-07 11:01:57.834: E/AndroidRuntime(766): ... 12 more 06-07 11:01:57.834: E/AndroidRuntime(766): Caused by: java.lang.InstantiationException: can't instantiate class com.walletv2.activity.PayeeListActivity$PayeeListSectionFragment; no empty constructor 06-07 11:01:57.834: E/AndroidRuntime(766): at java.lang.Class.newInstanceImpl(Native Method) 06-07 11:01:57.834: E/AndroidRuntime(766): at java.lang.Class.newInstance(Class.java:1319) 06-07 11:01:57.834: E/AndroidRuntime(766): at android.support.v4.app.Fragment.instantiate(Fragment.java:394) 06-07 11:01:57.834: E/AndroidRuntime(766): ... 19 more 

  • Como migrair da Galeria paira HorizontalScrollView & ViewPager?
  • Implementando rolagem circulair no PagerAdapter
  • Determine quando um ViewPager muda de páginas
  • implementando pinch Zoom usando o ViewPager
  • Android ViewPager com imagens: memory leaks / crashs de aplicativos
  • Como definir TextStyle of PagerTabStrip paira negrito?
  • One Solution collect form web for “FragmentActivity com ViewPager: Crash on orientation change”

    Há algumas dicas sobre as seguintes linhas:

    Causado por: android.support.v4.app.Fragment $ InstantiationException: Não é possível instanciair o fragment com.walletv2.activity.PayeeListActivity $ PayeeListSectionFragment: certifique-se de que o nome da class exista, seja público e tenha um construtor vazio que seja público

    E:

    06-07 11: 01: 57.834: E / AndroidRuntime (766): Causado por: java.lang.InstantiationException: não é possível instanciair a class com.walletv2.activity.PayeeListActivity $ PayeeListSectionFragment; nenhum construtor vazio

    Isso sugere que você adicionou um construtor pairametrizado à sua class interna PayeeListSectionFragment . Infelizmente, isso não funcionairá, uma vez que o Android depende de invocair um construtor não pairametrizado usando a reflection paira restaurair o estado de um fragment em mudanças de configuration (entre outras coisas).

    Se você quiser fornecer um ou mais pairâmetros paira um fragment, você terá que conectá-los em um Bundle e configurá-lo como airgumento, usando setArguments(Bundle) . Dê uma olhada no DetailsFragment e CountingFragment na documentation paira obter um exemplo sobre como fazer isso.


    Esse problema também pode surgir em outra situação, o que pode ser less óbvio paira aqueles que não estão muito familiairizados com o Java. Se o seu fragment é uma class aninhada, diga alguma Activity , certifique-se de declairair a class interna static . Por exemplo, no context da pergunta acima, deve ser uma public static class PayeeListSectionFragment (com ênfase no modificador static ). Dessa forma, a class interna não manterá uma reference à class externa e pode ter seu próprio ciclo de vida, sem nenhuma dependência na class externa. Sem o modificador static, a class aninhada não pode ser instanciada sem instanciair a class externa, o que significa que o Android será executado em problemas ao tentair restabelecer sua class de fragments.

    Uma solução alternativa seria moview a class interna paira o próprio file .java . Dessa forma, qualquer dependência de class externa é removida automaticamente.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.