2014-02-27 62 views
0

我最近添加了线性布局在我的滑动抽屉,线性布局很好,但我的列表视图的项目0点击时崩溃。没有活动点击滑动抽屉的Viewpager和嵌套片段

这是我的滑动抽屉:

public class MainActivity extends SherlockFragmentActivity { 

    // Declare Variable 
    DrawerLayout mDrawerLayout; 
    LinearLayout mDrawerMenu; 
    LinearLayout mDrawerProfile; 
    ListView mDrawerList; 
    ActionBarDrawerToggle mDrawerToggle; 
    MenuListAdapter mMenuAdapter; 
    String[] title; 
    String[] subtitle; 
    int[] icon; 
    Fragment fragment1 = new ProfileFragment(); 
    Fragment fragment2 = new InitSessionFragment(); 
    Fragment fragment3 = new TabsFragment(); 
    Fragment fragment4 = new Fragment1(); 
    Fragment fragment5 = new Fragment2(); 
    Fragment fragment6 = new Fragment3(); 

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

     // Generate title 
     title = new String[] { "PROFIL", "EXPLORER LA CARTE","FIL D'ACTUALITES", 
       "HISTORIQUE", "EVENEMENTS", "GROUPE" }; 

     // Generate subtitle 
     subtitle = new String[] { "", "", 
       "","", "", 
       "" }; 

     // Generate icon 
     icon = new int[] { R.drawable.mb_ic_cloud, R.drawable.mb_ic_cloud, 
       R.drawable.mb_ic_cloud, R.drawable.mb_ic_cloud, R.drawable.mb_ic_cloud, R.drawable.mb_ic_cloud }; 

     // Locate DrawerLayout in drawer_main.xml 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

     // Locate Entire Menu drawer_main.xml 
     mDrawerMenu = (LinearLayout) findViewById(R.id.left_drawer_menu); 
     //Open profile when click on layout profile 
     mDrawerProfile = (LinearLayout) findViewById(R.id.left_drawer_header_profil); 
     mDrawerProfile.setOnClickListener(new View.OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
       ft.replace(R.id.content_frame, fragment1); 
       ft.commit(); 
       // Close drawer 
       mDrawerLayout.closeDrawer(mDrawerMenu); 
      } 

     }); 


     // Locate ListView in drawer_main.xml 
     mDrawerList = (ListView) findViewById(R.id.left_drawer_list); 

     // Set a custom shadow that overlays the main content when the drawer 
     // opens 
     mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, 
       GravityCompat.START); 

     // Pass results to MenuListAdapter Class 
     mMenuAdapter = new MenuListAdapter(this, title, subtitle, icon); 

     // Set the MenuListAdapter to the ListView 
     mDrawerList.setAdapter(mMenuAdapter); 

     // Capture button clicks on side menu 
     mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

     // Enable ActionBar app icon to behave as action to toggle nav drawer 
     getSupportActionBar().setHomeButtonEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     // ActionBarDrawerToggle ties together the the proper interactions 
     // between the sliding drawer and the action bar app icon 
     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
       R.drawable.ic_drawer, R.string.drawer_open, 
       R.string.drawer_close) { 

      public void onDrawerClosed(View view) { 
       // TODO Auto-generated method stub 
       super.onDrawerClosed(view); 
      } 

      public void onDrawerOpened(View drawerView) { 
       // TODO Auto-generated method stub 
       super.onDrawerOpened(drawerView); 
      } 
     }; 

     mDrawerLayout.setDrawerListener(mDrawerToggle); 

     if (savedInstanceState == null) { 
      selectItem(0); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getSupportMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     if (item.getItemId() == android.R.id.home) { 

      if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) { 
       mDrawerLayout.closeDrawer(mDrawerMenu); 
      } else { 
       mDrawerLayout.openDrawer(mDrawerMenu); 
      } 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    // The click listener for ListView in the navigation drawer 
    private class DrawerItemClickListener implements 
      ListView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 
      selectItem(position); 
     } 
    } 

    private void selectItem(int position) { 

     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     // Locate Position 
     switch (position) { 
     case 0: 
      ft.replace(R.id.content_frame, fragment1); 
      break; 
     case 1: 
      ft.replace(R.id.content_frame, fragment2); 
      break; 
     case 2: 
      ft.replace(R.id.content_frame, fragment3); 
      break; 
     case 3: 
      ft.replace(R.id.content_frame, fragment4); 
      break; 
     case 4: 
      ft.replace(R.id.content_frame, fragment5); 
      break; 
     case 5: 
      ft.replace(R.id.content_frame, fragment6); 
      break; 
     } 
     ft.commit(); 
     mDrawerList.setItemChecked(position, true); 
     // Close drawer 
     mDrawerLayout.closeDrawer(mDrawerMenu); 
    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     // Sync the toggle state after onRestoreInstanceState has occurred. 
     mDrawerToggle.syncState(); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     // Pass any configuration change to the drawer toggles 
     mDrawerToggle.onConfigurationChanged(newConfig); 
    } 

    @Override 
    public boolean onKeyDown(int keycode, KeyEvent event) { 
     if (keycode == KeyEvent.KEYCODE_BACK) { 

      finish(); 
     } 
     return super.onKeyDown(keycode, event); 
    } 
} 

,当我在我的列表视图的项目0点击,我得到这个错误:

E/AndroidRuntime(12423): FATAL EXCEPTION: main 
E/AndroidRuntime(12423): java.lang.IllegalStateException: No activity 
E/AndroidRuntime(12423): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1091) 
E/AndroidRuntime(12423): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086) 
E/AndroidRuntime(12423): at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1877) 
E/AndroidRuntime(12423): at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1492) 
E/AndroidRuntime(12423): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947) 
E/AndroidRuntime(12423): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
E/AndroidRuntime(12423): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
E/AndroidRuntime(12423): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) 
E/AndroidRuntime(12423): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440) 
E/AndroidRuntime(12423): at android.os.Handler.handleCallback(Handler.java:587) 
E/AndroidRuntime(12423): at android.os.Handler.dispatchMessage(Handler.java:92) 
E/AndroidRuntime(12423): at android.os.Looper.loop(Looper.java:130) 
E/AndroidRuntime(12423): at android.app.ActivityThread.main(ActivityThread.java:3691) 
E/AndroidRuntime(12423): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(12423): at java.lang.reflect.Method.invoke(Method.java:507) 
E/AndroidRuntime(12423): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 
E/AndroidRuntime(12423): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
E/AndroidRuntime(12423): at dalvik.system.NativeStart.main(Native Method) 

编辑1:

问题似乎与我的ProfileFragment。

他是空的,以期寻呼机和三个嵌套的片段,像这样的时刻:

ProfileFragment

public class ProfileFragment extends SherlockFragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_profile, container, false); 


        ViewPager viewPager = (ViewPager) rootView.findViewById(R.id.myviewPager); 

        viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 

        PagerTabStrip pagerTabStrip = (PagerTabStrip) rootView.findViewById(R.id.pagerTabStrip); 
        pagerTabStrip.setDrawFullUnderline(true); 
        pagerTabStrip.setTabIndicatorColor(getResources().getColor(R.color.mb_l_blue)); 

     return rootView; 
    } 


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

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

      @Override 
      public Fragment getItem(int position) { 
       Bundle args = new Bundle(); 
       args.putInt(ProfileChildFragment.POSITION_KEY, position); 
       return ProfileChildFragment.newInstance(args); 
      } 

      @Override 
      public CharSequence getPageTitle(int position) { 
       switch(position){ 
       case 0: 
        return "SEMAINE "; 
       case 1: 
        return "MOIS "; 
       case 2: 
        return "ANNEE "; 
       case 3: 
        return "TOTAL "; 
       default: 
        return "TOTAL "; 
       } 

      } 

     } 
} 
+0

你尝试将片段实例移动到onCreate吗?而不是在类实例创建期间实例化它们? –

+0

这个问题似乎只与具有嵌套片段的viewpager的profilefragment ... – WhatsUp

回答

1

我完成了解决我的问题,给别人看看这个链接: No Activity with viewpager and nested fragment

我解决了这个,当我添加:

ft.replace(R.id.content_frame, fragment1); 
ft.attach(fragment1); 
ft.addToBackStack(null); 

希望这可以帮助别人。

+0

你救了我的命! –