Articles of fragmentmanager

如何在按钮上添加/删除片段?

目前我有一个“RELATIVE_LAYOUT”容器,我用它来添加我的片段。 我在按钮上使用OnClickListener将片段XML布局加载到RelativeLayout容器中。 我想要实现的是,当我按下按钮一次时,片段应该加载…当我再次按下它时,应该删除片段。 我已经尝试使用整数来识别是否加载了片段,但是失败了。 任何帮助赞赏…… 码: public class MainActivity extends Activity { Button B1,B2; int boolb1=0, boolb2=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); B1 = (Button)findViewById(R.id.btn1); B2 = (Button)findViewById(R.id.btn2); B1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { FragmentManager fm = getFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); FragmentOne f1 = new FragmentOne(); if(boolb1==0) {ft.add(R.id.frg1, […]

getSupportFragmentManager不在DialogFragment上编译

我怎么能这样说: public class TagsDialog extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); builder.setView(inflater.inflate(R.layout.tags_dialog, null)); builder.setMessage(“This is a message”).setTitle(“TAGS”); return builder.create(); } } 从ViewPager里面的Fragment里面: public class MyFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { … ImageView btnTags = (ImageView)view.findViewById(R.id.btnTags); btnTags.setOnClickListener(new […]

如何避免将相同的片段添加到堆栈中

我需要一些帮助。 以这种方式将片段添加到活动中。 问题是每次调用openFragment时都会创建片段并添加。 这很明显。 问题:我做了什么修改,所以它只能添加片段一次。 在具有相同片段标签的下一次调用中,它将无效。 case:第一次按下按钮添加片段并显示。 我再次按下相同的按钮它没有任何反应。 public static void openFragment(Activity activity, Fragment fragment) { FragmentManager fragmentManager = ((ActionBarActivity) activity) .getSupportFragmentManager(); FragmentTransaction ftx = fragmentManager.beginTransaction(); ftx.addToBackStack(fragment.getClass().getSimpleName()); ftx.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right); ftx.add(R.id.main_content, fragment); ftx.commit(); }

检查片段是否存在并重用它

每次用户点击列表视图中的项目时,我都会使用以下代码创建一个片段。 但是通过这种方式,片段是在每次用户点击时创建的。 我想要的是重用旧片段(如果存在)并仅重新加载其内容(不创建新片段)。 MagazineViewFragment fragment = new MagazineViewFragment(); fragment.openStream(itemSelected); FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.container, fragment) .commit(); 我能怎么做?

在推出并从backstackpopup时保存并恢复Fragment的UI状态

背景: 我有一个主Activity ,它包装了一个可以更改的主Fragment ,为了保持一个后端,我使用了FragmentManager的backstack。 保持活动堆栈的主要区别在于,当一个片段被推送到后台并被替换时,它将调用它的onDestroyView()但不是它的onDestroy() ,当它返回时它的视图将使用onCreateView()重新创建onCreateView() 。 (但是没有调用onCreate()因为没有onCreate()片段对象) 在活动堆栈中,它不会发生,并且视图仍然存在。 这对低端设备有积极影响,因为Android操作系统可以释放一些内存而你不必保持正确的视图(在我的应用程序中,来自服务器的消息可能随时改变视图),这样可以节省宝贵的内存带宽也是如此。 实际问题: 假设我有一个片段,用户点击某些内容并更改了视图,例如扩展了列表。 如果用户然后转到另一个屏幕(即片段),则前一个片段将被推送到后台,并且它的视图将被销毁。 当用户返回时,片段将被重新创建,并且不会“记住”用户所做的更改,例如列表不会被扩展,因为它应该 那么如何在不为每个视图制作特殊情况的情况下保存状态并恢复它? 不受欢迎的答案: 保持视图活着:做一些事情来保持视图会破坏片段效率 使用onSaveInstanceState() :当片段被推送到backstack时,它不会被调用,因为活动没有被破坏,而且这不是配置更改。 特殊对象:如果系统可以为您完成,则不想这样做。

popBackStack导致一次又一次地调用片段的oncreateView

我有3个片段A,B,CI写了一段代码来替换它们并维护后台堆栈: public void addFragment(Fragment fragmentToAdd, String fragmentTag) { FragmentManager supportFragmentManager = getSupportFragmentManager(); Fragment activeFragment = getActiveFragment(); FragmentTransaction fragmentTransaction = supportFragmentManager .beginTransaction(); if (null != activeFragment) { fragmentTransaction.hide(activeFragment); } fragmentTransaction.replace(R.id.layout_child_activity, fragmentToAdd, fragmentTag); if (supportFragmentManager.getBackStackEntryCount() > 1) { supportFragmentManager.popBackStack(); } fragmentTransaction.addToBackStack(fragmentTag); fragmentTransaction.commit(); } 在这段代码中 if (supportFragmentManager.getBackStackEntryCount() > 1) { supportFragmentManager.popBackStack(); } 如果堆栈长度大于1,我使用pop来获取最新的片段。现在由于这个,当长度大于1时,它会一次又一次地调用onCreate视图。 喜欢 : 打开A. 开放B. 打开C. […]

使用替换时片段不调用onPause或onStop

我有这个奇怪的问题,当我用另一个片段替换它时,我的片段没有调用任何结束生命周期方法,如onPause和onStop。 我像这样替换片段 public static void replaceFragment(Activity activity, int layoutId, Fragment fragment, String title, String shortTitle) { FragmentTransaction transaction = activity.getFragmentManager().beginTransaction().replace(layoutId, fragment); transaction.addToBackStack(title); transaction.setBreadCrumbTitle(title); transaction.setBreadCrumbShortTitle(shortTitle); transaction.commit(); activity.getFragmentManager().executePendingTransactions(); } 我认为它是以某种方式保持我的片段活着,即使我的popBackStack因为在它之前被显示之后再次替换相同的片段,然后它也在onStart之前调用onStop?

替换不调用onAttach,onCreate,onCreateView等活动中的片段

所以我在这里有这段代码,我正在创建一个新的Fragment并用另一个片段替换它。 这很好用。 但是我注意到第一行是调用构造函数但是onAttach() , onCreate()等不是。 如果我要取消注释第二行它将无法工作,因为updateItem(URL)需要在onCreate()函数中启动的webView。 DetailViewFragment detailFragment = new DetailViewFragment(); //detailFragment.updateItem(URL); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.displayList, detailFragment); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.addToBackStack(null); ft.commit(); 非常感谢任何有助于使用第二行未使用的帮助。

android.support.v4.app.FragmentManager或android.app.FragmentManager?

我正在学习Android开发。 我陷入了一件非常容易的事情。 我正在使用一个Activity,2个片段和1个界面创建一个App。 android:minSdkVersion=”11″ android:targetSdkVersion=”19 所以在主要活动中我试图使用管理器创建对Fragment B的引用。 我被困在这里,因为Eclispse告诉我改变一些事情(见下文): 我的意思:` @Override public void respond(int i) { // TODO Auto-generated method stub FragmentManager manager =getFragmentManager(); FragmentB f2= (FragmentB) manager.findFragmentById(R.id.fragment2); }` 如果我这样做,我会收到错误消息并需要执行一些更改。 更改后,代码看起来像这样(我仍然无法访问FragmentB): @Override public void respond(int i) { // TODO Auto-generated method stub android.app.FragmentManager manager =getFragmentManager(); android.app.Fragment f2= manager.findFragmentById(R.id.fragment2); } 有关额外的详细信息,我将在此处放置活动的导入标题: package com.example.modular_ui; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; […]

BetterPickers没有支持库

我正在使用https://github.com/derekbrameyer/android-betterpickers为我的应用程序使用时间和日期选择器。 但是,我的应用程序不需要支持库,在将FragmentManager设置为Time-和DatePickerBuilder时,我似乎需要SupportFragmentManager:/有没有办法避免支持库?