Articles of android fragments

Fragment PopBackStack

我遇到一个奇怪的问题,同时使用Fragments并popup它们。 我有一个片段活动: Step1:我在起始命名片段A中的那个Activity的onCreate中附加了一个片段: 这是onCreate of Fragment Activity @Override protected void onCreate(Bundle savedBundleState) { super.onCreate(savedBundleState); setContentView(R.layout.activity_base_new); Fragement_Home home = new Fragement_Home(); FragmentManager manager = getSupportFragmentManager(); manager.beginTransaction().add(R.id.frameContent, home).addToBackStack(“home”).commit(); } 步骤:2之后我附加了使用以下代码替换Fragment: Fragment_More moreFragment = new Fragment_More(); FragmentManager manager = getSupportFragmentManager(); manager.beginTransaction().replace(R.id.frameContent, moreFragment).addToBackStack(“more”).commit(); 第3步:之后,我再次以相同的方式在Fragment_More上添加了一个片段: Fragment_AboutRockstand termsConditions = new Fragment_AboutRockstand(); getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.frameContent, termsConditions).addToBackStack(“about_rockstand”).commit(); 这是我的片段活动onBackPressedButton Lisetener: @Override public void onBackPressed() { FragmentManager […]

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

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

调用initLoader()后Loader没有启动?

我有一个片段,并且想要在单击按钮时启动加载器: public class MyFragment extends Fragment { public void onActivityCreated() { super.onActivityCreated(); Button btn = …; btn.setOnClickListener(new OnClickListener() { public void onClick(View view) { getLoaderManager().initLoader(500, null, mMyCallback); } }); } private LoaderManager.LoaderCallbacks mMyCallback = new LoaderManager.LoaderCallbacks() { @Override public Loader onCreateLoader(int arg0, Bundle arg1) { Log.e(TAG, “LoaderCallback.onCreateLoader().”); return new MyLoader(getActivity()); } } } public class […]

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 […]

我应该如何跟踪Google Analytics v4中的碎片?

随着Google Analytics v4(Android)的发布,跟踪片段视图的推荐方法是什么? 这个解决方案仍然是推荐的方式 – https://stackoverflow.com/a/19284014/413254 ? 文档中的示例( https://developers.google.com/analytics/devguides/collection/android/v4/#analytics-xml )具有以下配置: global_tracker.xml 300 true AnalyticsSampleApp ScreenView AnalyticsSampleApp EcommerceView UA-XXXXXXX-Y 这个配置看起来是为活动启用自动跟踪,但我认为这对Fragments没有任何魔力? 在这个例子中,我假设如果t.setScreenName(path);将发送“AnalyticsSampleApp ScreenView”屏幕事件t.setScreenName(path); 被称为路径是”com.google.android.gms.analytics.samples.mobileplayground.EcommerceFragment” ?

Android Espresso:如何在将一个活动跟踪到多个片段架构时测试特定片段

我的应用程序包含一个Activity for many Fragments 。 我希望使用Espresso来测试Fragments的UI。 但是我遇到了一个问题。 如何测试未添加到onCreate的Activity的Fragment 。 我在Fragment看到的所有例子都涉及在onCreate中添加Fragment 。 那么我如何告诉Espresso去特定Fragment并从那里开始呢? 谢谢

如何从片段中以编程方式在android中切换选项卡?

我已经实现了一个扩展FragmentActivity的TabActivity 。 它有5个标签,每个标签是一个Fragment 。 我正在寻找的是以编程方式在标签之间切换。 例如:如果我在tab4。 单击按钮我想从tab4移动到tab1 。 尝试了很多,但找不到解决方案。 尝试以下但它没有帮助。 来自SecondTab public void switchTabInActivity(String value){ FirstTab parent; parent = (FirstTab) getActivity().getParent(); parent.switchTab(value); } TabActivity /** To Change Tab*/ public void switchTab(String tabno){ this.onTabChanged(tabno); }

从片段中检索上下文

我创建了一个类来从PHP文件中检索JSON编码的注释。 这个类从AsyncTask扩展而来: public class RecuperarComentarisFoto extends AsyncTask{ @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(????); pDialog.setMessage(“Creating Product..”); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); } @Override protected String doInBackground(String… arg0) { // TODO Auto-generated method stub return null; } @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub super.onPostExecute(result); } } 正如你所看到的,我正试图在“doInBackground”进程工作时显示ProgressDialog。 但是progressDialog构造函数,请求一个Context,我不知道如何提供它。 我从Fragment调用这个类,所以我不能像这样访问上下文: pDialog […]

在活动之间保留片段状态

它可以在活动之间保留Fragment吗? 假设我有活动A ,片段F_Left放在左边,片段F_Right放在右边。 如果我想发布一个新的活动并保持片段F_Left …我该怎么办? 我可以在活动之间保留Fragment F_Left状态吗? 请注意,我想启动一个新的Activity,因为Fragment F_Left是我的应用程序菜单,Fragment F_Right完全改变了用户操作的上下文…而且我的应用程序有很多操作,所以每次操作都有一个Activity是有意义的。 我知道它可以在一个Activity保留Fragment ,但是由于Fragment生命周期与容器Activity密切相关,我不知道这是否可能在Activities之间保持Fragment状态。

当方向更改时,使用选项卡重新加载活动时,片段会初始化两次

当我更改设备的方向时,我在使用制表符和片段重新加载活动时遇到问题。 这是情况: 我有一个活动,在操作栏中有3个标签。 每个选项卡在主视图中的FrameLayout中加载不同的片段。 如果我不改变设备的方向,一切正常。 但是,当我这样做时,Android会尝试初始化当前选定的片段两次,从而产生以下错误: E/AndroidRuntime(2022): Caused by: android.view.InflateException: Binary XML file line #39: Error inflating class fragment 以下是产生错误的步骤序列: 我加载活动,选择选项卡nr 2.并更改设备的方向。 Android会破坏tab nr 2加载的片段的活动和实例(从现在开始,’片段2’)。 然后继续创建活动和片段的新实例。 在Activity.onCreate()里面我将第一个标签添加到操作栏。 当我这样做时,会自动选择此选项卡。 它可能代表未来的问题,但我现在不介意。 onTabSelected并创建并加载第一个片段的新实例(参见下面的代码)。 我添加所有其他选项卡而没有触发任何事件,这很好。 我调用ActionBar.selectTab(myTab)来选择Tab nr 2。 为第一个选项卡调用onTabUnselected() ,然后为第二个选项卡onTabSelected() 。 此序列替换Fragment 2实例的当前片段(请参阅下面的代码)。 接下来,在Fragment 2实例上调用Fragment.onCreateView()并使片段布局膨胀。 这是问题所在。 Android在片段实例ONCE AGAIN上调用onCreate()然后调用onCreate() ,当我尝试对布局进行充气(第二次)时会产生exception。 显然问题是Android正在初始化片段两次,但我不知道为什么。 当我自动加载活动时,我尝试不选择第二个选项卡,但第二个片段无论如何都被初始化并且没有显示(因为我没有选择它的选项卡)。 我发现了这个问题: Android片段在方向更改时重新创建 用户问我的基本相同,但我不喜欢所选的答案(它只是一个workaroud)。 必须有一些方法让没有android:configChanges技巧的工作。 如果不清楚,我想知道如何阻止片段的重新创建或避免它的双重初始化。 很高兴知道为什么会发生这种情况。 :P 这是相关的代码: […]