Articles of android fragmentactivity

如何以编程方式按主要活动更新 – 刷新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 […]

从片段内部调用活动方法

我试图从Fragment屏幕调用一个方法。 我有一个名为myMethod()的方法,它位于一个名为MyActivity的活动中; 我有一个名为Screen1Fragment的片段。 我想从Screen1Fragment中调用MyActivity.myMethod(),但我不知道该怎么做。 以前Screen1Fragment是一个活动,因此我扩展了MyActivity,以便我可以直接调用myMethod()。 但我不得不将活动更改为片段以滑动标签使用。 提前致谢。

AsyncTask在ViewPager的每个页面上运行

我在android开发教程中有3个Tabs 现在我想要做的很简单,我在每个页面上使用Fragments。 我想在每个页面上显示rss feed中的不同内容。 问题是,当我转到下一个选项卡时,它运行前一个片段的AsyncTask(在onCreateView中)。 所以从第1页开始,它可以很好地加载内容。 然后当你去第2页时再次运行第1页碎片的onCreateView。 并且显然给出了NullException。 关键是它不应该在第2页运行Page 1的AsyncTask。 我不认为有任何示例代码需要告诉我你需要看哪个部分。 然后我会编辑我的问题。 ListFragment中的AsyncTask: public class MyAsyncTask extends AsyncTask<List, Void, List> { // List of messages of the rss feed private List messages; private volatile boolean running = true; @SuppressWarnings(“unused”) private WeakReference fragmentWeakRef; private MyAsyncTask(NieuwsSectionFragment fragment) { this.fragmentWeakRef = new WeakReference(fragment); } @Override protected void onPreExecute() […]

全局加载器(LoaderManager),用于在多个活动/片段中重用

我想要实现的目标: 我有两个不同的片段。 我希望他们两个以两种forms(在列表和地图上)显示相同的数据。 我希望他们共享一个Loader(特别是AsyncTaskLoader )。 一切正常,但Loader不会被重复使用。 创建另一个并且数据加载两次。 我做的事: 在Fragment我使用LoaderManager lm = getActivity().getSupportLoaderManager(); 在这两个中,我实现了LoaderCallbacks<ArrayList>和所需的方法。 在两者中我使用lm.initLoader(0, args, this); 。 但是当我输出lm.toString()它们似乎是两个不同的lm.toString() 。 数据下载两次。 如何从不同的活动/片段重新连接到同一个Loader,而不是从它开始的那个? 它应该是可能的,因为无论如何在每个onCreate()上都将上下文附加到Loader,例如在配置更改时。

Android – IllegalStateException:map的大小为零

我是新手android程序员。 让我给出一些背景信息。 我的项目使用ActionBarSherlock。 我有一个包含两个片段的活动(Activity1) – 一个SherlockListFragment和一个包含谷歌地图MapView(本质上是一个MapFragment)的SherlockFragment。 搜索结果显示在列表片段和地图片段中,操作栏选项按钮切换列表和地图之间当前显示的片段。 选择列表中的项目或搜索结果的地图会启动一个新活动(Activity2),显示所选项目的数据。 这个新活动有一个类似的流程:一个显示数据的片段,一个显示位置的地图片段 – 由一个操作栏选项按钮切换。 问题: 我可以在搜索结果(Activity1)列表片段中选择一个列表项,并且成功启动详细信息页面(Activity2)。 当我从(Activity1)中的地图覆盖中选择一个地图项时,应用程序崩溃,我得到如下所示的堆栈跟踪。 到目前为止我尝试了什么: 我搜索了“地图零大小”和相同搜索的许多排列,包括“android”和“illegalstateexception”以及堆栈跟踪的各种行,我检查了甚至与android没有关系但与谷歌地图apis一般,我无法find任何地方或任何人遇到此错误除了在这个urlhttp://www.androidpub.com/1551654但我不知道韩国,谷歌翻译没什么帮助。 我试图find一些源代码片段来看看发生了什么,但事实并非如此。 我已经在我的代码中添加了日志以尝试确定exception发生的位置,并且我能够find的所有内容都发生在(Activity2)细节活动开始后的某个时间,也就是在调用onCreate()之后。 并且详细信息片段和地图片段都已在onCreate()中成功实例化了booth。 我无法在我的代码中find一个位置来捕获exception。 因此,对于我能看到的所有内容,此exception似乎完全是谷歌MapView代码中的错误,但如果我在任何地方犯了错误,请显示它。 我愿意向任何可以告诉我这里发生了什么的人提供帮助。 所以,总结一下。 从具有当前显示的mapview的活动(Activity1)转到另一个也包含另一个mapview的片段的Activity(Activity2)时发生崩溃。 但是,当从(Activity1)中显示的列表片段转到包含另一个映射片段的其他活动(Activity2)时,不会发生崩溃。 我希望这足够详细。 如果您有任何疑问,请发表评论。 D/memalloc( 121): /dev/pmem: Allocated buffer base:0x4215c000 size:2088960 offset:4177920 fd:66 D/memalloc(30944): /dev/pmem: Mapped buffer base:0x5b4f5000 size:6266880 offset:4177920 fd:164 D/AndroidRuntime(30944): Shutting down VM W/dalvikvm(30944): threadid=1: thread exiting with uncaught exception […]

片段作为Android中的单身人士

一般问题我可以将碎片定义为单身人士吗? 具体问题在我的应用程序中,我有一个’FragmentActivity’和FragmentPager ,它有两个片段, FragmentA和FragmentB 。 我将片段定义为FragmentA Singletons扩展Fragment类: private static instance = null; public static FragmentA getInstance() { if (instance == null) { instance = new FragmentA(); } return instance; } private FragmentA() {} 在我的FragmentPagerAdapter : @Override public Fragment getItem(int position) { switch(position){ Fragment fragment = null; case 0: fragment = FragmentA.getInstance(); break; case 1: fragment […]

onResume()和onResumeFragments()之间的区别

FragmentActivity.onResume() javadoc: 将onResume()发送到片段。 请注意,为了更好地与平台的旧版本进行互操作,在此调用时,附加到活动的片段不会恢复。 这意味着在某些情况下,仍可以保存先前的状态,而不允许修改状态的片段事务。 要正确地与处于正确状态的片段进行交互,您应该覆盖onResumeFragments()。 FragmentActivity.onResumeFragments() javadoc: 这是onResume()的片段定向版本,您可以覆盖它以在其片段恢复的同一点执行Activity中的操作。 一定要经常打电话到超级class。 以上是否意味着平台保证 : 在执行FragmentActivity.onResume() ,片段永远不会被恢复(它们的onResume()未被调用) 在执行FragmentActivity.onResumeFragments()片段总是会被恢复(它们的onResume()被调用FragmentActivity.onResumeFragments() ? 如果没有,开发商如何正确使用并对上述内容保持警惕?