该方法getSupportFragmentManager()是未定义的类型MainActivity为Actionbarsherlock [英] The method getSupportFragmentManager() is undefined for the type MainActivity for Actionbarsherlock
本文介绍了该方法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屋!
查看全文