Отсутствие активности при нажатии на скользящий ящик для фрагмента с видоискателем и вложенными фрагментами

Я недавно добавил раскладку lineart на моем выдвижном ящике, линейная раскладка работает хорошо, но пункт 0 моего представления списка падает при нажатии.

Это мой выдвижной ящик:

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 ";
                }

            }

        }
}

1 ответ

Решение

Я закончил, чтобы решить мою проблему, для других посмотрите эту ссылку: Нет активности с viewpager и вложенным фрагментом

Я решил это, когда я добавлю:

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

Надеюсь, это поможет кому-то.

Другие вопросы по тегам