Articles of android fragments

android中片段的devise模式

我正在读一本书,就像这样说:“现在,碎片很新,所以没有完善的模式可循。 但是我不知道在哪里阅读更多关于碎片的devise模式。 我想用很多不同的屏幕制作应用程序,应用程序应该可以用于平板电脑和手机,所以这些片段在这里会帮助我很多。 但正如我所说这是一个大的,我即将开始devise它。 所以我真的需要好的devise。 而在我开始之前,我想看到一些devise模式在Android的片段的指导方针。 我有最佳实践或东西? 我读了很多关于他们的用法和所有这些东西的片段,但是我没有find一些用于制作手机和平板电脑的应用程序的devise模式。 我真的需要高级篇章。 谢谢

有时从后台返回到应用程序,单身保存的静态数据为空

我使用经典的单例模式来存储从我的初始活动(splash活动)中的webServices获得的数据,然后在整个应用程序中访问它。 我有一个导致MainActivity的splash活动,它是里面有片段的滑动菜单活动,最初的片段是一个包含支持映射片段的片段。 我的问题是存储在单身人士内部的数据,有时当应用程序转到后台(按住home并移动到另一个应用程序),然后转到最近的应用程序并select我的应用程序,单身人士的数据是空的,这会导致我的应用程序崩溃。 我已经花了几个小时检查我的单例是否应该写入,如果我没有把它自己写成null,那么静态数据变成null的可能原因是什么。 在我的search后,我发现了一个很好的和简单的解释,解释何时/为什么一个静态数据可以成为null – Android静态对象生命周期 @Samuh答案和我引用 “所以,如果你创build一个android应用程序并初始化一个静态variables,它将一直保留在JVM中,直到发生以下情况之一:1.类被卸载2. JVMclosures3.进程死亡” 关于#1和#2 – 我不知道什么时候发生。 关于#3 – 这是非常好的,好像用户将从“最近的应用程序”中点击我的应用程序,这将调用启动器活动在我的情况下“飞溅的活动”,这将从服务器获取数据(最新),再次存储在我的单身 – 完美! ,这正是我的其他应用程序内发生的,不同的是我没有使用滑动菜单和片段,只有活动。 在我的情况下,从后台返回将不会调用启动器活动这是“闪屏”,但将调用MainActivity(主滑动菜单活动)连同初始片段,当我尝试从我的单身访问数据所有数据里面它是空的,单身本身不是null,因为在片段的onCreate()我使用getInstance()我相信这意味着单身已经丢失,现在重新创build没有数据,所以如果过程是为什么我没有回到发射器的活动? 希望有人能提前帮助,谢谢。 我的单身class: public class MySingleton { // some private data members with getters/setters private String x,y,z; // the instance private static MySingleton theInstance = null; //private ctor private MySingleton(){ //doing something } //get instance public […]

Eclipse自动创build片段布局,我如何禁用它

我不想使用片段和片段布局。 这是可能的,以禁用日食的那个属性? 首先,我创build一个类和xml文件,然后我声明他们在Android Manifest文件中,这对我有用,但是如果我可以禁用它,则需要很长时间,这会更容易。

如何使用Espresso检查Viewpager项目ID?

我有一个由相同片段视图的副本组成的Viewpager。 你可以在它们之间滑动。 我正在写一个Espressotesting,试图在每个页面的ID上声明,但是显然是不明确的,因为有多个页面加载,他们都共享相同的ID。 我不想更改视图寻呼机一次只加载1页。 在我的应用程序中,这样做效率不高。 我也想过使用标签,并用一个唯一的string标记每个视图,但是我只修改了源代码,这样我的testing工作。 我不喜欢那样 用Espresso检查viewpager页面内容的正确方法是什么?

为什么片段类可能不是有效的?

我刚刚使用AndroidStudio向导创build了一个PreferenceActivity,运行它引发了一个奇怪的exception: java.lang.RuntimeException: Subclasses of PreferenceActivity must override isValidFragment(String) to verify that the Fragment class is valid! 我看到了这里的build议解决scheme,但我想知道为什么我要检查我的片段类是否有效,因为我甚至没有完全理解什么是“有效”的定义,所以我决定问社区: PreferenceActivity有isValidFragment(String fragmentName)方法,由于某种原因必须重写,为什么? 一个片段类怎么可能不是有效的? 以及这样的覆盖会出现什么问题: @Override protected boolean isValidFragment(String fragmentName) { return true; }

Robolectric 3.0 InflateException与地图自定义片段

我见过很多关于这个问题的话题,例如这个关于SNAPSHOT版本的答案 。 这仍然是必要的,因为当我尝试设置我的活动时,我得到: android.view.InflateException: XML file /Users/billey_b/android/android/app/build/intermediates/res/merged/targetARTVm/debug/layout/activity_preorder.xml line #-1 (sorry, not yet implemented): Error inflating class fragment android.view.InflateException: XML file build/intermediates/res/merged/targetARTVm/debug/layout/activity_preorder.xml line #-1 (sorry, not yet implemented): Error inflating class fragment at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at android.view.LayoutInflater.inflate(LayoutInflater.java:365) at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) at com.heetch.activities.PreOrderActivity.onCreate(PreOrderActivity.java:72) at android.app.Activity.performCreate(Activity.java:5933) at org.robolectric.util.ReflectionHelpers.callInstanceMethod(ReflectionHelpers.java:195) […]

Mapbox在片段上膨胀视图

我有一个Android的片段上的Mapbox MapView的膨胀问题。 当我在Activity上使用相同的代码(除了Activity和Fragment之间的标准差异),我可以正确加载MapView,但不能在Fragment上加载。 Mapbox 在这里也有一个MapFragment类,但我不确定如何在Fragment中正确使用它(这个例子仍然在Activity中)。 与谷歌地图API我能够使用片段上的MapView没有问题。 下面的logcat行: at com.example.exampleapp.FragmentMap.onCreateView(FragmentMap.java:133) 是指Java行: fragmentLayout = inflater.inflate(R.layout.fragment_map, container, false); 以下是与该日志一起的这个问题的相关代码: fragment_map.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:mapbox="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent" android:layout_height="fill_parent" > <com.mapbox.mapboxsdk.views.MapView android:id="@+id/mapview" android:layout_width="match_parent" android:layout_height="match_parent" mapbox:access_token="@string/access_token"/> <android.support.v7.widget.CardView android:id="@+id/map_card" android:layout_width="100dp" android:layout_height="100dp" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_marginLeft="5dp" android:layout_marginTop="5dp"> <com.mapbox.mapboxsdk.views.MapView android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/mini_map" android:layout_centerVertical="true" android:layout_centerHorizontal="true" mapbox:access_token="@string/access_token"/> </android.support.v7.widget.CardView> FragmentMap.java: public class FragmentMap extends Fragment { private MapView mv, miniMap; […]

多个活动/片段和模型视图演示者模式

首先,我知道使用Model View Presenter有不同的实现,在我的脑海里,只要你具有明确定义的层次和完成他们的指定angular色,那么你如何实现这个模式是可以解释的。 我已经在只有一个Activity很多应用程序中实现了这个模式。 我现在开始了一个新的项目,它有多个活动和附加Fragments ,包括嵌套片段( ViewPager )。 我现在正在试图把MVP翻译成这个项目,我打了一个概念墙,想要一些指导和见解。 到目前为止,我已经创build了上述结构,并开始与View&Presenter(不pipeActivity或Fragment )进行1:1的关系。 我觉得这是好的,但是如果我举个例子,我发送了一个请求,从Activity视图到它的Presenter,这个Activity视图返回一个结果,我将如何去传播结果,即更新所有其他Activities / Fragments当前不处于Paused()或Stop()状态。 我觉得在这种情况下,应该有一个中央主持人,更新所有必要的活动和片段的意见,但我不知道如何去做这件事。 当前,当创build每个Activity和Fragment ,它将创build一个Presenter类的新实例,将其作为参考传递(Activities和Fragments实现自己的接口),演示者将其存储为WeakReference并可以在调用相关接口方法返回结果。 根据文档,每当Fragments想互相沟通和附加的Activity你应该使用callback接口。 考虑到这一点,我应该有一个Activity实现的callback接口和Fragmentscallback函数来实现请求,所以实际上只有Activity会有一个Presenter和Model层,Fragments必须callback才能发出各种请求? 对不起,如果这听起来有点混乱,希望这是明确的,以了解我想达到什么目的,如果我正在思考沿着正确的路线……或完全离谱!

closuresDialogFragment时的布局拉伸

我有一个具有以下布局的活动: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:id="@+id/top_menu_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="16dp" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"> // ICONS </RelativeLayout> <FrameLayout android:id="@+id/temperatura_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="184dp" android:layout_centerHorizontal="true"> <com.github.pavlospt.CircleView xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/reading_value" android:layout_width="192dp" android:layout_height="192dp" android:layout_gravity="center" /> </FrameLayout> <ImageView android:id="@+id/add_item_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/bottomBar" android:layout_centerHorizontal="true" android:padding="12dp" android:layout_marginTop="36dp" android:background="?attr/selectableItemBackgroundBorderless" android:clickable="true" android:focusable="true" android:scaleType="center" app:srcCompat="@drawable/ic_add_item_black_24px" android:contentDescription="@string/add_item_btn_description" /> <com.roughike.bottombar.BottomBar android:id="@+id/bottomBar" android:layout_width="match_parent" android:layout_height="60dp" […]

查看片段android中的重用

我试图保存我的视图状态在我的片段,但我担心我泄漏我的活动。 这是我在做什么: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state){ if(mView != null){ View oldParent = mView.getParent(); if(oldParent != container){ ((ViewGroup)oldParent).removeView(mView); } return mView; } else{ mView = inflater.inflate(R.id.fragview, null) return mView; } } 我很担心,因为我知道所有的视图保持一个上下文,我不知道是否是从充气器膨胀的活动上下文或应用程序上下文。 也许用实际的方式创build视图并使用getActivity()。getApplication()而不是使用inflater来设置它的属性会更好。 我将不胜感激这方面的任何反馈。 谢谢! 编辑:确认活动泄漏,虽然这个代码很好,不要这样做:*(