该方法getSupportFragmentManager()是未定义的类型MainActivity为Actionbarsherlock [英] The method getSupportFragmentManager() is undefined for the type MainActivity for Actionbarsherlock

查看:1335
本文介绍了该方法getSupportFragmentManager()是未定义的类型MainActivity为Actionbarsherlock的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


  • 我使用Actionbarsherlock库,这是执行项目
    抽屉操作

  • 我也确保我不混合兼容程序包,还是我是
    收到此错误

MainActivity.java

 进口的java.util.ArrayList;
进口android.app.FragmentManager;
进口android.content.res.Configuration;
进口android.content.res.TypedArray;
进口android.os.Bundle;
进口android.support.v4.app.ActionBarDrawerToggle;
进口android.support.v4.app.FragmentTransaction;
进口android.support.v4.widget.DrawerLayout;
进口android.util.Log;
进口android.view.View;
进口android.widget.AdapterView;
进口android.widget.ListView;进口com.actionbarsherlock.app.SherlockActivity;
进口com.actionbarsherlock.app.SherlockFragment;
进口com.actionbarsherlock.view.Menu;
进口com.actionbarsherlock.view.MenuItem;公共类MainActivity扩展SherlockActivity {        私人DrawerLayout mDrawerLayout;
        私人的ListView mDrawerList;
        私人ActionBarDrawerToggle mDrawerToggle;        //导航抽屉称号
        私人CharSequence的mDrawerTitle;        //用于存储应用程序标题
        私人CharSequence的mTitle;        //滑动菜单项
        私有String [] navMenuTitles;
        私人TypedArray navMenuIcons;        私人的ArrayList< NavDrawerItem> navDrawerItems;
        私人NavDrawerListAdapter适配器;        @覆盖
        保护无效的onCreate(捆绑savedInstanceState){
            super.onCreate(savedInstanceState);
            的setContentView(R.layout.activity_main);            mTitle = mDrawerTitle =的getTitle();            //负荷滑动菜单项
            navMenuTitles = getResources()getStringArray(R.array.nav_drawer_items)。            从资源//导航抽屉图标
            navMenuIcons = getResources()
                    .obtainTypedArray(R.array.nav_drawer_icons);            mDrawerLayout =(DrawerLayout)findViewById(R.id.drawer_layout);
            mDrawerList =(ListView控件)findViewById(R.id.list_slidermenu);            navDrawerItems =新的ArrayList< NavDrawerItem>();            //添加导航抽屉里的物品数组
            //首页
            navDrawerItems.add(新NavDrawerItem(navMenuTitles [0],navMenuIcons.getResourceId(0,-1)));
            //找人
            navDrawerItems.add(新NavDrawerItem(navMenuTitles [1],navMenuIcons.getResourceId(1,-1)));
            // 相片
            navDrawerItems.add(新NavDrawerItem(navMenuTitles [2],navMenuIcons.getResourceId(2,-1)));
            //社区,这里将添加计数器
            navDrawerItems.add(新NavDrawerItem(navMenuTitles [3],navMenuIcons.getResourceId(3,-1),真的,22));
            //网页
            navDrawerItems.add(新NavDrawerItem(navMenuTitles [4],navMenuIcons.getResourceId(4,-1)));
            //什么是热的,我们将在这里添加计数器
            navDrawerItems.add(新NavDrawerItem(navMenuTitles [5],navMenuIcons.getResourceId(5,-1),真的,50+));
            //回收类型数组
            navMenuIcons.recycle();            mDrawerList.setOnItemClickListener(新SlideMenuClickListener());            //设置导航抽屉名单适配器
            适配器=新NavDrawerListAdapter(getApplicationContext()
                    navDrawerItems);
            mDrawerList.setAdapter(适配器);            //使操作栏中的应用程序图标和行为作为切换按钮
            getActionBar()setDisplayHomeAsUpEnabled(真)。
            getActionBar()setHomeButtonEnabled(真)。            mDrawerToggle =新ActionBarDrawerToggle(这一点,mDrawerLayout,
                    R.drawable.ic_drawer,//导航菜单切换图标
                    R.string.app_name,//导航抽屉打开 - 描述的可访问性
                    R.string.app_name //导航抽屉接近 - 描述的可访问性
            ){
                公共无效onDrawerClosed(查看视图){
                    。getActionBar()的setTitle(mTitle);
                    //调用prepareOptionsMenu()来显示操作栏图标
                    invalidateOptionsMenu();
                }                公共无效onDrawerOpened(查看drawerView){
                    。getActionBar()的setTitle(mDrawerTitle);
                    //调用prepareOptionsMenu()隐藏操作栏图标
                    invalidateOptionsMenu();
                }
            };
            mDrawerLayout.setDrawerListener(mDrawerToggle);            如果(savedInstanceState == NULL){
                //对第一个项目的资产净值首次显示视图
                displayView(0);
            }
        }        / **
         *滑动菜单项,点击监听器
         * * /
        私有类SlideMenuClickListener工具
                ListView.OnItemClickListener {
            @覆盖
            公共无效onItemClick(适配器视图<>母公司,观景,INT位置,
                    长ID){
                //选定导航抽屉项显示视图
                displayView(位置);
            }
        }
        公共布尔onCreateOptionsMenu(菜单菜单){
            。getSherlock()getMenuInflater()膨胀(R.menu.main,菜单);
            返回true;
        }
        公共布尔onOptionsItemSelected(菜单项项){
            //切换上选择操作栏中的应用程序图标/标题导航抽屉
            如果(mDrawerToggle.onOptionsItemSelected((android.view.MenuItem)项)){
                返回true;
            }
            //处理操作栏中点击动作
            开关(item.getItemId()){
            案例R.id.action_settings:
                返回true;
            默认:
                返回super.onOptionsItemSelected(项目);
            }
        }        / * *
         *时调用invalidateOptionsMenu()被触发
         * /
        @覆盖
        prepareOptionsMenu(菜单菜单)上公共布尔{
            //如果导航抽屉被打开,隐藏行动项目
            布尔drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
            menu.findItem(R.id.action_settings).setVisible(drawerOpen!);
            返回super.on prepareOptionsMenu(菜单);
        }        / **
         所选导航抽屉列表项* Diplaying片段视图
         * * /
        私人无效displayView(INT位置){
            //更新替换片段的主要内容
            SherlockFragment片段= NULL;
            开关(位置){
            情况下0:
                片段=新HomeFragment();
                打破;
            情况1:
                片段=新FindPeopleFragment();
                打破;
            案例2:
                片段=新PhotosFragment();
                打破;
            案例3:
                片段=新CommunityFragment();
                打破;
            情况4:
                片段=新PagesFragment();
                打破;
            情况5:
                片段=新WhatsHotFragment();
                打破;            默认:
                打破;
            }            如果(片段!= NULL){
                android.support.v4.app.FragmentTransaction英尺= getSupportFragmentManager()调用BeginTransaction()取代(R.id.frame_container,片段).commit()。                //更新所选项目和标题,然后关上抽屉
                mDrawerList.setItemChecked(位置,真正的);
                mDrawerList.setSelection(位置);
                (navMenuTitles [位置])的setTitle;
                mDrawerLayout.closeDrawer(mDrawerList);
            }其他{
                //错误创建片段
                Log.e(MainActivity,出错创建片段);
            }
        }        @覆盖
        公共无效的setTitle(CharSequence的标题){
            mTitle =称号;
            。getActionBar()的setTitle(mTitle);
        }        / **
         *当使用ActionBarDrawerToggle,你必须在调用它
         * onPostCreate()和onConfigurationChanged()...
         * /        @覆盖
        保护无效onPostCreate(捆绑savedInstanceState){
            super.onPostCreate(savedInstanceState);
            //同步onRestoreInstanceState后切换状态已经发生。
            mDrawerToggle.syncState();
        }        @覆盖
        公共无效onConfigurationChanged(配置NEWCONFIG){
            super.onConfigurationChanged(NEWCONFIG);
            //把任何配置更改抽屉toggls
            mDrawerToggle.onConfigurationChanged(NEWCONFIG);
        }    }


在行

  android.support.v4.app.FragmentTransaction英尺= getSupportFragmentManager()调用BeginTransaction()取代(R.id.frame_container,片段).commit()。

我正误差

 的方法getSupportFragmentManager()是未定义的类型MainActivity


解决方案

您应该扩展SherlockFragmentActivity代替SherlockActivity

  • I am using Actionbarsherlock library, This is a project to perform drawer operation
  • I have also ensured i don't mix compatibility packages, still i am getting this error

MainActivity.java

import java.util.ArrayList;
import android.app.FragmentManager;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;

public class MainActivity extends SherlockActivity {

        private DrawerLayout mDrawerLayout;
        private ListView mDrawerList;
        private ActionBarDrawerToggle mDrawerToggle;

        // nav drawer title
        private CharSequence mDrawerTitle;

        // used to store app title
        private CharSequence mTitle;

        // slide menu items
        private String[] navMenuTitles;
        private TypedArray navMenuIcons;

        private ArrayList<NavDrawerItem> navDrawerItems;
        private NavDrawerListAdapter adapter;

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

            mTitle = mDrawerTitle = getTitle();

            // load slide menu items
            navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);

            // nav drawer icons from resources
            navMenuIcons = getResources()
                    .obtainTypedArray(R.array.nav_drawer_icons);

            mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
            mDrawerList = (ListView) findViewById(R.id.list_slidermenu);

            navDrawerItems = new ArrayList<NavDrawerItem>();

            // adding nav drawer items to array
            // Home
            navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
            // Find People
            navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
            // Photos
            navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
            // Communities, Will add a counter here
            navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1), true, "22"));
            // Pages
            navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
            // What's hot, We  will add a counter here
            navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1), true, "50+"));


            // Recycle the typed array
            navMenuIcons.recycle();

            mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

            // setting the nav drawer list adapter
            adapter = new NavDrawerListAdapter(getApplicationContext(),
                    navDrawerItems);
            mDrawerList.setAdapter(adapter);

            // enabling action bar app icon and behaving it as toggle button
            getActionBar().setDisplayHomeAsUpEnabled(true);
            getActionBar().setHomeButtonEnabled(true);

            mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                    R.drawable.ic_drawer, //nav menu toggle icon
                    R.string.app_name, // nav drawer open - description for accessibility
                    R.string.app_name // nav drawer close - description for accessibility
            ) {
                public void onDrawerClosed(View view) {
                    getActionBar().setTitle(mTitle);
                    // calling onPrepareOptionsMenu() to show action bar icons
                    invalidateOptionsMenu();
                }

                public void onDrawerOpened(View drawerView) {
                    getActionBar().setTitle(mDrawerTitle);
                    // calling onPrepareOptionsMenu() to hide action bar icons
                    invalidateOptionsMenu();
                }
            };
            mDrawerLayout.setDrawerListener(mDrawerToggle);

            if (savedInstanceState == null) {
                // on first time display view for first nav item
                displayView(0);
            }
        }

        /**
         * Slide menu item click listener
         * */
        private class SlideMenuClickListener implements
                ListView.OnItemClickListener {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                // display view for selected nav drawer item
                displayView(position);
            }
        }


        public boolean onCreateOptionsMenu(Menu menu) {
            getSherlock().getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }


        public boolean onOptionsItemSelected(MenuItem item) {
            // toggle nav drawer on selecting action bar app icon/title
            if (mDrawerToggle.onOptionsItemSelected((android.view.MenuItem) item)) {
                return true;
            }
            // Handle action bar actions click
            switch (item.getItemId()) {
            case R.id.action_settings:
                return true;
            default:
                return super.onOptionsItemSelected(item);
            }
        }

        /* *
         * Called when invalidateOptionsMenu() is triggered
         */
        @Override
        public boolean onPrepareOptionsMenu(Menu menu) {
            // if nav drawer is opened, hide the action items
            boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
            menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
            return super.onPrepareOptionsMenu(menu);
        }

        /**
         * Diplaying fragment view for selected nav drawer list item
         * */
        private void displayView(int position) {
            // update the main content by replacing fragments
            SherlockFragment fragment = null;
            switch (position) {
            case 0:
                fragment = new HomeFragment();
                break;
            case 1:
                fragment = new FindPeopleFragment();
                break;
            case 2:
                fragment = new PhotosFragment();
                break;
            case 3:
                fragment = new CommunityFragment();
                break;
            case 4:
                fragment = new PagesFragment();
                break;
            case 5:
                fragment = new WhatsHotFragment();
                break;

            default:
                break;
            }

            if (fragment != null) {


                android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, fragment).commit();

                // update selected item and title, then close the drawer
                mDrawerList.setItemChecked(position, true);
                mDrawerList.setSelection(position);
                setTitle(navMenuTitles[position]);
                mDrawerLayout.closeDrawer(mDrawerList);
            } else {
                // error in creating fragment
                Log.e("MainActivity", "Error in creating fragment");
            }
        }

        @Override
        public void setTitle(CharSequence title) {
            mTitle = title;
            getActionBar().setTitle(mTitle);
        }

        /**
         * When using the ActionBarDrawerToggle, you must call it during
         * onPostCreate() and onConfigurationChanged()...
         */

        @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 toggls
            mDrawerToggle.onConfigurationChanged(newConfig);
        }

    }


In the line ::

android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, fragment).commit();

I am getting error as::

The method getSupportFragmentManager() is undefined for the type MainActivity 

解决方案

You should extend SherlockFragmentActivity instead of SherlockActivity

这篇关于该方法getSupportFragmentManager()是未定义的类型MainActivity为Actionbarsherlock的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆