- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
错误 The method getSupportFragmentManager() is undefined for the type Context 当我在我的 oncreateview 中使用 getSupportFragmentManager() 时发生。
使用了不同的上下文类型引用来克服这个错误,但这些都不起作用:
例如globalContext = container.getContext(); globalContext = getActivity().getApplicationContext();
getSupportFragmentManager() 只能在 FragmentActivity 中设置。我的问题是是否有一种方法可以引用 getSupportFragmentManager()。
我的 fragment 。
public class HomeFragment extends Fragment implements
ActionBar.TabListener {
public HomeFragment(){}
Context globalContext;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_home, container, false);
globalContext = this.getActivity();
actionBar = getActivity().getActionBar();
android.support.v4.app.FragmentManager fm = globalContext.getSupportFragmentManager(); // getting error The method getSupportFragmentManager() is undefined for the type Context }}
mAdapter = new TabsPagerAdapter(fm);
}
}
}
tabhoSTListner 适配器。
import android.support.v4.app.FragmentManager;
public class TabsPagerAdapter extends FragmentPagerAdapter {
public TabsPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}}
这是我的 fragment Activity
=====================================
public class MainActivity extends FragmentActivity {
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 boolean isDrawerOpen = false;
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();
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
// TODO Auto-generated method stub
if(slideOffset > .55 && !isDrawerOpen){
onDrawerOpened(drawerView);
isDrawerOpen = true;
} else if(slideOffset < .45 && isDrawerOpen) {
onDrawerClosed(drawerView);
isDrawerOpen = false;
}
super.onDrawerSlide(drawerView, slideOffset);
}
};
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);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// toggle nav drawer on selecting action bar app icon/title
if (mDrawerToggle.onOptionsItemSelected(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);
menu.findItem(R.id.itmFavorite).setVisible(!isDrawerOpen);
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
Fragment 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) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.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);
}
}
最佳答案
1)创建成员变量:
private FragmentActivity context;
2) 覆盖 fragment 的 onAttach 方法:
@Override
public void onAttach(Activity activity) {
context = (FragmentActivity) activity;
super.onAttach(activity);
}
3) 像这样获取 FragmentManager 的支持:
FragmentManager fm = context.getSupportFragmentManager();
关于android - 未为类型 Context 定义方法 getSupportFragmentManager(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25377395/
为什么我收到一条错误消息,显示将 getSupportFragmentManager() 更改为 getFragmentManager() googleMap = ((SupportMapFragme
我在 fragment 内使用 map fragment 。但是在 getSupportFragmentManager() 上出现错误,即无法解析 getSupportFragmentManager(
我收到错误- "Can not resolve method getSupportFragmentManager()" 在下面的代码中。 对于 getSupportFragmentManager(),
我正在尝试按照此处 map API 上的教程来制作 Android 应用程序来学习 Java。在教程中,有一个在 Main Activity 中调用的辅助类 MapInitializer。函数 ini
在主要 Activity 中我有这个 public void showTimePickerDialog(View v) { DialogFragment newFragment = new u
我正在尝试将当前 fragment 的 Intent 添加到另一个 fragment 。为此,我在卡片中的 ImageButton 上添加了一个 OnclickListener。 但它不能正常工作,我
在我的应用程序中,我有两个 Activity ,它们都有一个静态方法。我从一个单独的 Activity 中调用这些方法。问题是在我的静态方法中我无法访问 getSupportFragmentManag
我有一个扩展 SherlockActivity 的主要 Activity 下面的代码似乎给我带来了麻烦 PopularFragment fragment = new PopularFragment()
点击抽屉导航项目后,我尝试使用 TabBar 和 View Pager 显示新 fragment 。 问题是新创建的 Fragment 导致 NULL 指针异常 viewPager.setAdapte
我收到以下错误:“方法 getSupportFragmentManager() 在我的 fragment 文件中未定义类型 new View.OnClickListener(){}”下面。 我有通过
我将 ViewPager 作为 RecyclerView 中的第一项。我想将 FragmentStatePagerAdapter 设置为 viewpager在 onBindViewHolder() 方
我想在我的 Android 应用程序中显示 Google map : public class DisplayMapActivity extends ActionBarActivity { p
设备进入待机状态后,如果我调用 getSupportFragmentManager(),我会得到一个 FragmentManager,其中包含未初始化的 fragment ,其所有变量都设置为 nul
这是我的 ItemAdapter 的代码,我以这种方式将其用作列表的适配器。 list.setAdapter(new ItemAdapter(thisContext,imageUrl)); 我正在尝试
这个问题在这里已经有了答案: What is difference between getSupportFragmentManager() and getChildFragmentManager()
我正在开发一个 android 应用程序,我想保存我在矢量 fragment 中的 fragment 。当我在 onSaveIstanceState 中使用 putFragment 时,系统抛出 Il
最近我在 android studios 中启动了一个新项目,并遇到了一个错误,我无法真正找到或看到问题所在,当我的应用程序遇到 getSupportFragmentManager() 行时,它崩溃了
我在 getSupportFragmentManager() 上遇到错误“此方法在 Fragment 中未定义”,同时创建带有滑动选项卡的 slider 菜单我准备了如下代码.. public cla
我正在使用 viewpager 并编译 API 23。我在我的代码中显示以下语句的编译错误,但该项目确实可以编译。 List fragments = getSupportFragmentManager
我正在使用 Android 编程中的教程编写我的第一个使用 fragment 的应用程序:Big Nerd Ranch 指南。 我创建了一个 fragment 和一个相应的布局,现在我想向将使用它的父
我是一名优秀的程序员,十分优秀!