3

저는 Fragments를 처음 사용하고 있으며 조각과 뷰 페이지를 사용하는 몇 가지 탭이있는 활동이 있습니다.Android Fragment & ViewPager : 오리엔테이션 변경시 오류가 발생합니다.

내 문제는 오리엔테이션을 바꾸거나 홈 화면으로 이동할 때마다 응용 프로그램이 충돌한다는 것입니다. 여기에 내 조각 중 하나입니다 ...

public class MainActivity extends SherlockFragmentActivity { 

    ActionBar actionBar; 
    ViewPager mPager; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     actionBar = getSupportActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     mPager = (ViewPager) findViewById(R.id.pager); 

     FragmentManager fm = getSupportFragmentManager(); 

     ViewPager.SimpleOnPageChangeListener pageChangeListener = new ViewPager.SimpleOnPageChangeListener(){ 
      @Override 
      public void onPageSelected(int position) { 
       super.onPageSelected(position); 
       actionBar.setSelectedNavigationItem(position); 
      } 
     }; 

     mPager.setOnPageChangeListener(pageChangeListener); 

     MyFragmentPagerAdapter fragmentPagerAdapter = new MyFragmentPagerAdapter(fm); 

     mPager.setAdapter(fragmentPagerAdapter); 

     actionBar.setDisplayShowTitleEnabled(true); 

     ActionBar.TabListener tabListener = new ActionBar.TabListener() { 

      @Override 
      public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      } 

      @Override 
      public void onTabSelected(Tab tab, FragmentTransaction ft) { 
       mPager.setCurrentItem(tab.getPosition()); 
      } 

      @Override 
      public void onTabReselected(Tab tab, FragmentTransaction ft) { 
      } 
     }; 

     Tab firstTab = mActionBar.newTab().setText("First Tab").setTabListener(tabListener); 

     actionBar.addTab(firstTab); 

     Tab secondTab = mActionBar.newTab() 
      .setText("Second Tab") 
      .setTabListener(tabListener); 

     actionBar.addTab(secondTab); 
    } 
} 

:

public class FirstFragment extends SherlockFragment implements ActionBar.TabListener{ 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragmentone, container, false); 

     // Stuff... 

     return view; 
    } 

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

... 그리고 내 조각 어댑터 :

여기 내 활동이다

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{ 

    final int PAGE_COUNT = 2; 

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

    @Override 
    public Fragment getItem(int arg0) { 
     Bundle data = new Bundle(); 
     switch(arg0){ 
      case 0: 
       FirstFragment firstFragment = new FirstFragment(); 
       data.putInt("current_page", arg0+1); 
       firstFragment.setArguments(data); 
       return firstFragment; 

     case 1: 
       SecondFragment secondFragment = new SecondFragment(); 
       data.putInt("current_page", arg0+1); 
       secondFragment.setArguments(data); 
       return secondFragment; 
     } 
     return null; 
    } 

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

. .. 내 모든 활동 XML 파일입니다.

<android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
    /> 

</RelativeLayout> 

제발 도와주세요,이 두통이 나를 일으켰습니다. 도움이된다면 ActionBarSherlock 라이브러리를 사용하고 있습니다.

편집 : 저는 여기에 같은 (이

11-27 22:44:14.590: D/dalvikvm(803): newInstance failed: no <init>() 
11-27 22:44:14.599: D/AndroidRuntime(803): Shutting down VM 
11-27 22:44:14.599: W/dalvikvm(803): threadid=1: thread exiting with uncaught exception (group=0x40a70930) 
11-27 22:44:14.669: W/Trace(700): Unexpected value from nativeGetEnabledTags: 0 
11-27 22:44:14.760: E/AndroidRuntime(803): FATAL EXCEPTION: main 
11-27 22:44:14.760: E/AndroidRuntime(803): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pk.chemhelp/com.pk.chemhelp.Debug}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.pk.chemhelp.Debug$FirstFragment: make sure class name exists, is public, and has an empty constructor that is public 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3692) 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.app.ActivityThread.access$700(ActivityThread.java:141) 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1240) 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.os.Looper.loop(Looper.java:137) 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.app.ActivityThread.main(ActivityThread.java:5039) 
11-27 22:44:14.760: E/AndroidRuntime(803): at java.lang.reflect.Method.invokeNative(Native Method) 
11-27 22:44:14.760: E/AndroidRuntime(803): at java.lang.reflect.Method.invoke(Method.java:511) 
11-27 22:44:14.760: E/AndroidRuntime(803): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
11-27 22:44:14.760: E/AndroidRuntime(803): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
11-27 22:44:14.760: E/AndroidRuntime(803): at dalvik.system.NativeStart.main(Native Method) 
11-27 22:44:14.760: E/AndroidRuntime(803): Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.pk.chemhelp.Debug$FirstFragment: make sure class name exists, is public, and has an empty constructor that is public 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.support.v4.app.Fragment.instantiate(Fragment.java:395) 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.support.v4.app.FragmentState.instantiate(Fragment.java:96) 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1726) 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:198) 
11-27 22:44:14.760: E/AndroidRuntime(803): at com.pk.chemhelp.Debug.onCreate(Debug.java:63) 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.app.Activity.performCreate(Activity.java:5104) 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
11-27 22:44:14.760: E/AndroidRuntime(803): ... 12 more 
11-27 22:44:14.760: E/AndroidRuntime(803): Caused by: java.lang.InstantiationException: can't instantiate class com.pk.chemhelp.Debug$FirstFragment; no empty constructor 
11-27 22:44:14.760: E/AndroidRuntime(803): at java.lang.Class.newInstanceImpl(Native Method) 
11-27 22:44:14.760: E/AndroidRuntime(803): at java.lang.Class.newInstance(Class.java:1319) 
11-27 22:44:14.760: E/AndroidRuntime(803): at android.support.v4.app.Fragment.instantiate(Fragment.java:384) 
11-27 22:44:14.760: E/AndroidRuntime(803): ... 19 more 
11-27 22:44:14.880: W/ActivityManager(290): Force finishing activity com.pk.chemhelp/.Debug 
11-27 22:44:14.950: W/Trace(519): Unexpected value from nativeGetEnabledTags: 0 
+1

LogCat 오류도 게시하십시오. – Sam

+0

오류 스택 추적을 게시 할 수 있습니까? – antew

+1

내일 오후에 로그를 게시합니다. 나는 이것을 게시하자마자 컴퓨터에서 내렸다. * 레이지 종료 * – Pkmmte

답변

2
필요로 할 때 그것을 인스턴스화 할 수 있도록 예외, 안드로이드가 Fragment의 클래스에 대한 완전한 액세스를 꽤 명확해야한다

충돌 할 때 얻을 내 로그 캣입니다 구성 변경). 문제는 Debug 클래스의 내부 클래스로 FirstFragment을 선언했으며 안쪽 클래스가 항상 내부 클래스의 인스턴스 (예 : Debug)에 묶여 있기 때문에 Android 시스템에서 FirstFragment을 인스턴스화 할 수 없으므로 FirstFragment 단순히 인스턴스화 할 수는 없습니다.

이 솔루션은 자신의 자바 파일에 FirstFragment을 넣어 하나하거나 그래서가에 더 이상 연결되지 않은합니다 (Debug 클래스를 유지하고 그것을 static를함으로써 Debug 클래스의 "분리"를 FirstFragment 클래스에있다 Debug 클래스의 인스턴스) :

public static class FirstFragment extends SherlockFragment implements ActionBar.TabListener{ 
+0

감사합니다. – Pkmmte

관련 문제