6

हाय दोस्तों मैंने FragmentActivity में ViewPager का उपयोग किया है। अभिविन्यास में परिवर्तन होने पर मुझे दुर्घटना हो रही है।ViewPager के साथ FragmentActivity: ओरिएंटेशन परिवर्तन पर क्रैश

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_list); 
    context = this; 
    loadInitialData(); 
    setActionBar(); 
    initializeUiComponents(); 
} 

private void initializeUiComponents() { 
    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.pager); 
    } 

मेरे डेटा डेटाबेस से गतिशील रूप से आ रहा है, और मैं Sysnctask जो onResume में डेटाबेस से datat हो रही है() कॉल करने के लिए की है। Asynctask के onPostExecute() पर है।

protected void onPostExecute(Void result) { 

      mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 
      mViewPager.setAdapter(mSectionsPagerAdapter); 
     } 
     mSectionsPagerAdapter.notifyDataSetChanged(); 
     } 
} 

जोड़ना FragmentAdapterCode:

public class SectionsPagerAdapter extends FragmentPagerAdapter { 
    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    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 argument. 
     Fragment fragment = new PayeeListSectionFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(PayeeListSectionFragment.ARG_SECTION_NUMBER, position + 1); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return 2; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 

     return string; 
    } 
} 

जोड़ना टुकड़ा कोड:

public class PayeeListSectionFragment extends Fragment { 
    /** 
    * The fragment argument representing the section number for this fragment. 
    */ 
    public static final String ARG_SECTION_NUMBER = "section_number"; 

    public PayeeListSectionFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = null; 
     \\ rootView inflated 
     return rootView; 
    } 
} 

एक्सएमएल प्रयोग किया जाता है:

<android.support.v4.view.ViewPager 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    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_parent" 
     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> 

दोस्तों! कृपया सहायता कीजिए! मैं उन्मुखीकरण परिवर्तन पर निम्न क्रैश हो रही है:

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 start 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.NativeStart.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 

उत्तर

7

वहाँ निम्नलिखित लाइनों पर संकेत के एक जोड़े है:

की वजह से: android.support.v4.app.Fragment $ InstantiationException: करने में असमर्थ दृष्टांत टुकड़ा com.walletv2.activity.PayeeListActivity $ PayeeListSectionFragment: यकीन है कि वर्ग के नाम मौजूद है, जनता है, और एक खाली निर्माता है कि सार्वजनिक है

और है:

06-07 11: 01: 57.834: ई/AndroidRuntime (766): java.lang.InstantiationException: की वजह से दृष्टांत नहीं कर सकते वर्ग com.walletv2.activity.PayeeListActivity $ PayeeListSectionFragment; कोई खाली निर्माता

पता चलता है कि है कि आप अपने PayeeListSectionFragment भीतरी वर्ग के लिए एक पैरामिट्रीकृत निर्माता जोड़ दिया है। दुर्भाग्यवश, यह काम नहीं करेगा, क्योंकि एंड्रॉइड कॉन्फ़िगरेशन परिवर्तनों (अन्य चीजों के साथ) पर एक खंड की स्थिति को पुनर्स्थापित करने के लिए प्रतिबिंब का उपयोग करके एक गैर-पैरामीटरयुक्त कन्स्ट्रक्टर का आह्वान करने पर निर्भर करता है।

यदि आप एक टुकड़े में एक या अधिक पैरामीटर की आपूर्ति करना चाहते हैं, तो आपको उन्हें Bundle में प्लग करना होगा और इसे setArguments(Bundle) का उपयोग करके तर्क के रूप में सेट करना होगा। DetailsFragment and CountingFragment in the documentation पर एक उदाहरण के लिए एक उदाहरण के लिए देखें।


यह समस्या किसी अन्य स्थिति में भी उत्पन्न हो सकती है, जो उन लोगों के लिए कम स्पष्ट हो सकती है जो जावा से परिचित नहीं हैं। यदि आपका टुकड़ा कुछ Activity कहने का घोंसला वाला वर्ग है, तो सुनिश्चित करें कि आप आंतरिक कक्षा static घोषित करें। उदाहरण के लिए, उपर्युक्त प्रश्न के संदर्भ में, यह public static class PayeeListSectionFragment होना चाहिए (static संशोधक पर जोर देने के साथ)। इस तरह आंतरिक वर्ग बाहरी वर्ग का संदर्भ नहीं रखेगा और बाहरी वर्ग पर किसी भी निर्भरता के बिना अपना जीवन चक्र प्राप्त कर सकता है। स्थैतिक संशोधक के बिना, नेस्टेड क्लास को बाहरी वर्ग को तत्काल किए बिना तत्काल नहीं किया जा सकता है, जिसका अर्थ है कि एंड्रॉइड आपके खंड वर्ग को बहाल करने का प्रयास करते समय मुद्दों में भाग लेगा।

आंतरिक विकल्प को अपने स्वयं के .java फ़ाइल में स्थानांतरित करने का एक वैकल्पिक समाधान होगा। इस तरह किसी भी बाहरी वर्ग निर्भरताओं को स्वचालित रूप से हटा दिया जाता है।

+1

हाय एमएच, मैंने इसे पहले ही चेक कर लिया है, लेकिन यह मामला नहीं है: – Vineet

+0

@ विनीत: ठीक है, यह या तो है, या आपने एक (गैर-पैरामीटरकृत) रचनाकार जोड़ा है जो निजी, संरक्षित या पैकेज संरक्षित है , 'सार्वजनिक' के स्थिर में। यह आपकी मदद कर सकता है अगर आप अपने प्रश्न में प्रासंगिक कोड स्निपेट जोड़ देंगे। कम अनुमान है कि, सटीक समस्या को इंगित करना आसान है। –

+0

मैंने FragmentpagerAdapter और Fragment कोड जोड़ा है। कृप्या सहायता करे। – Vineet

संबंधित मुद्दे