Articles of android fragmentactivity

无法保留嵌套片段

是否有另一种保存嵌套片段状态的方法? 或者,如果我们不这样做,为什么? 谢谢 ! 02-13 11:42:43.258: E/AndroidRuntime(7167): java.lang.IllegalStateException: Can’t retain fragements that are nested in other fragments 02-13 11:42:43.258: E/AndroidRuntime(7167): at android.support.v4.app.Fragment.setRetainInstance(Fragment.java:742)

在onActivityResult()中提交FragmentTransaction是否安全?

几年前,当我尝试在onActivityResult()回调中提交FragmentTransaction时,我在我的一个应用程序中遇到了问题。 谷歌搜索,我发现这个问题和答案 ,说 在调用onActivityResult() ,活动/片段的状态可能尚未恢复,因此在此期间发生的任何事务都将丢失。 我结束了对我的应用程序在相同答案中推荐的解决方案,并且生活很好。 然而,最近的实验表明,事情可能已经发生了变化,现在可以安全地从onActivityResult()内部提交FragmentTransaction 。 (支持v4) FragmentManager.beginTransaction()的文档为事务定义了安全窗口: 注意:片段事务只能在活动保存其状态之前创建/提交。 如果您尝试在FragmentActivity.onSaveInstanceState() (以及之后的FragmentActivity.onStart或FragmentActivity.onResume()之前提交事务,则会收到错误。 我看到了阅读onActivityResult()的文档 当您的活动重新启动时,您将在onResume()之前立即收到此调用。 这让我相信在onActivityResult()执行这些事务应该是安全的,因为onStart()已经被调用,把我放在安全窗口中。 我做了一个应用程序来测试它,我成功地看到了我创建并在onActivityResult()内部提交的对话框片段。 我有相同的应用程序也记录活动生命周期回调,所以我可以检查他们的顺序,我看到onStart() ,然后onRestoreInstanceState() ,然后每次onActivityResult() 。 我错过了什么吗? 或者框架已更改, onActivityResult()现在可以保证是片段事务的安全位置吗? 此行为是否因API级别而异? 我发现了另一个问题和答案似乎以与我相同的方式阅读文档,但两者都超过一年,并且没有特别将onActivityResult()称为交易的安全场所。

从Fragment调用DialogFragment(而不是FragmentActivity)?

这是我的问题:我确实有一个FragmentActivity,它包含一个片段列表(在它们之间导航的方法)在其中一个片段我需要调用一个DialogFragment来显示该片段中包含的图片的“缩放”。 但似乎你无法直接从Fragment调用DialogFragment。 有没有办法让片段的“回调”到FragmentActivity来显示片段上的DialogFragment。 或者只是一个“故障”直接从片段中调用它。 如果是这样的话,你怎么知道一个关于它的好教程? 最好的祝福, 艾莉佩奇

如何在FragmentActivity上设置工具栏?

我想在我的活动上设置工具栏 ,扩展FragmentActivity 。 我知道使用setSuppoertActionBar(toolbar)方法我们扩展了AppCompatActivity而不是FragmentActivity但是我重写了onMenuItemSelected(int featureId, MenuItem item)方法,这是AppCompatActivity最终方法,并且最终方法无法覆盖。 所以我限制扩展FragmentActivity 。 这是我的代码: public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); setSupportActionBar(toolbar); -> error is here } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onMenuItemSelected(int featureId, MenuItem […]

Android嵌套片段方法

我是使用Android片段的新手。我有一个场景让我解释一下我得到的 扩展FragmentActivity的主要活动。我的主要活动包括两个片段 选项列表扩展了Fragment 详细信息扩展Fragment的列表 扩展Fragment的详细描述 当我启动我的主要活动时。 它将包含碎片1中的选项列表和碎片2中的详细信息列表。 然后我从详细信息列表中选择一个项目。 然后必须将其描述加载到主要活动的片段2中 看到这个图像 我不知道如何实现这一目标。 我的意思是我如何告诉Details List片段加载主要活动内的详细描述片段。 此外,当我按下后退按钮时,我必须返回到初始阶段,即 编辑: 我所做的是在片段内创建接口(Listener)并在我的父活动上实现它。 但是如果有10个不同的片段,我需要在父活动中实现所有接口。 那么有没有其他方法来实现这一目标?

Android在片段中替换片段

我有一个名为“MeinProfilFragment”的片段。 以及一个处理ActionBar-Tabs逻辑的MainActivity。 在“MeinProfilFragment”中,我已经为“登录过程”提供了逻辑 。 用户登录成功后,我想显示另一个布局。 怎么做 ? 可以替换片段中的片段吗? 或者我是否必须调用MainActivity进行UI更新? 这是“MainActivity”的代码: public class MainActivity extends Activity { public static int selectedTab; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionBar.setDisplayShowHomeEnabled(false); actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayShowCustomEnabled(false); Tab meinProfil = actionBar.newTab().setText(“Mein Profil”); TabListener tabListenerMeinProfil = new TabListener(this,”Mein Profil”,MeinProfilFragment.class); meinProfil.setTabListener(tabListenerMeinProfil); actionBar.addTab(meinProfil); Tab mitglieder = actionBar.newTab().setText(“Mitglieder”); TabListener tabListenerMitglieder […]

如何以编程方式按主要活动更新 – 刷新ViewPager中的片段

我正在构建一个使用Fragment和单个MainActivity的应用程序,它在同一个ViewPager中显示不同的片段,以复制典型MVC应用程序的行为。 问题是我还没有理解如何以编程方式更新片段以使用新的片段更改来更新ViewPager 例如,当我从main调用setFragment(int interval, Point[] snodePoint)时,我有这个Fragment显示图表(在我的意图中),图表应该在ViewPager更新 public class LineFragment extends Fragment { static int interval; static Point snodePoints[]; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View v = inflater.inflate(R.layout.fragment_linegraph, container, false); Bundle bundle = this.getArguments(); ChartConfig cg = bundle.getParcelable(“FragmentData”); snodePoints = cg.getPoints(); interval= cg.getInterval(); Line l = new Line(); for(int i=0; […]

ViewPager和FragmentPagerAdapter中的片段的Android生命周期管理

我一直在努力找出使用ViewPager正确管理FragmentActivity中FragmentActivity的方法。 在我详细介绍之前,我所面临的问题的快速摘要如下: 我有一个带ViewPager的FragmentActivity 。 ViewPager使用自定义但非常简单的FragmentPagerAdapter 。 ViewPager每个Fragment都包含一个ExpandableListView 。 我还有一个名为“刷新”的操作栏按钮。 现在,让我们假设ViewPager只有一个Fragment 。 创建活动,填充Fragment的ExpandableListView (到目前为止一直很好)。 单击“刷新”按钮时, FragmentActivity的处理方法将迭代分配给FragmentPagerAdapter的Fragments列表,并调用每个Fragment上的refresh()以填充其ListView。 但是,当设备的方向改变时(例如,从纵向到横向),将重新创建活动,片段也是如此。 现在单击“刷新”按钮将迭代未初始化的Fragments 。 我知道我很模糊,特别是没有示例代码,但请耐心等待。 我从应用程序/活动的开头跟踪了问题和方法调用: FragmentActivity.onCreate() FragmentActivity.setContentView() FragmentActivity.createPagerFragments() < – 这将创建一个Fragments的ArrayList,并将它们分配给一个新的FragmentPagerAdapter,而FragmentPagerAdapter又分配给ViewPager。 Fragment.onAttach() Fragment.onCreate() < – 这里没什么特别的,只是调用super方法。 Fragment.onCreateView() < – 这里没什么特别的,只是给布局充气 Fragment.onActivityCreated() < – 这里也没什么。 <> FragmentActivity.onCreate() Fragment.onAttach() Fragment.onCreate() FragmentActivity.setContentView() FragmentActivity.createPagerFragments() Fragment.onCreateView() Fragment.onActivityCreated() <> FragmentActivity.refresh() < – 迭代来自#13的新创建的片段(不是Android的这些片段!)。 <> 所以问题就像我看到的那样:当Android在屏幕方向改变后重新创建FragmentActivity及其Views (上面调用#9-15),它创建了新的Fragment对象,其状态恢复到了原来是。 […]

在Android中保存MapFragment(Maps v2)状态

我正在使用新的GoogleMaps API(v2)并且片段存在一些问题。 我的应用程序(Map,List)中有两个片段,用户可以在它们之间切换。 到目前为止使用此代码正常工作: if (itemPosition == 0) { getSupportFragmentManager().beginTransaction() .replace(R.id.fragmentpos, myMapFragment).commit(); } else if (itemPosition == 1) { getSupportFragmentManager().beginTransaction() .replace(R.id.fragmentpos, myListFragment).commit(); }…… 当我使用地图时,切换到列表片段,然后返回到地图片段,不保存地图的最后位置。 这不是我想要的,我希望地图处于保存状态,因为我“离开”它..我怎么能完成这个? 我试图保存相机的位置 public void onSaveInstanceState(Bundle outState){ outState.putDouble(“LAT”, mMap.getCameraPosition().target.latitude); outState.putDouble(“LON”, mMap.getCameraPosition().target.longitude); outState.putFloat(“BEAR”, mMap.getCameraPosition().bearing); … } 并在onCreateView()中恢复它,但Bundle始终为null。 如果我替换片段,则不会调用onSaveInstanceState。 那么如何保存地图的状态呢?

Android导航抽屉碎片状态

我目前正在为我的Android APP使用导航抽屉。 在我的第一个片段中,我有一个使用Facebook的Graph API加载数据的片段。 因此,当我的App首次加载时,它首先转到第一个片段。 然后,我使用导航抽屉点击另一个片段并查看它。 最后,我重复使用导航抽屉返回第一个片段并查看它。 我面临的问题是,如何选择导航抽屉项目,如何继续使用已创建的片段,而不是重新创建片段。 我切换片段的代码如下所示。 private void displayView(int position) { // update the main content by replacing fragments Fragment fragment = null; switch (position) { case 0: fragment = new SelectionFragment(); break; case 1: fragment = new HomeFragment(); break; case 2: fragment = new PhotosFragment(); break; case 3: fragment = new […]