我想了解如何使用Fragments来创build适应多个屏幕和布局的应用程序。 我研究了几个例子: Android开发人员指南中的碎片文档。 Google IO应用 来自ActionBar Sherlock的片段样本。 所有这些倡导多种Activity方法: 在大屏幕上,显示具有多个Fragment的单个Activity 在一个较小的屏幕上,分割多个Activity的Fragment 。 我想到了另一种方法 – 单一的Activity一: 有一个单独的Activity其中的所有Fragment 。 根据屏幕大小和方向,显示/隐藏适当的Fragment (使用FragmentTransaction.show() / FragmentTransaction.hide() )。 为了说明Android开发者指南使用的相同的“新闻文章列表/文章内容”示例: 使News活动包含ArticleListFragment和ArticleReaderFragment 。 在选项卡上,总是显示两个片段。 在电话中, ArticleReaderFragment最初是隐藏的。 从列表中select文章时,将隐藏ArticleReaderFragment并显示ArticleReaderFragment 。 有没有人使用类似的方法? 这种方法可能有什么实际的缺点吗? 与多重活动方式相比,这看起来好吗? 例如,片段不能在XML中显示/隐藏 – 为此, 必须使用FragmentTransaction 。 编辑1:描述一个假设的情景 想象一下,一个应用程序最多可以在屏幕上显示三个“窗格”。 此外,这些是要考虑的因素: 电话一次只能显示一个窗格(无论纵向/横向) 7英寸平板电脑可以显示2个窗格,纵向分割,横向分割横向模式。 10英寸的平板电脑可以显示2个窗格,纵向分割; 3个窗格在横向上水平分割。 为了简单起见,让电视屏幕摆脱讨论。 现在,翻译这个devise: 我们有三个片段:Frag1,Frag2和Frag3。 在最简单的情况下,所有三个片段都在一个Activity中(让我们称之为ActivityA)。 这是10英寸的风景。 另一个“简单”的情况是当每个片段在自己的活动 – ActivityA包含Frag1; ActivityB包含Frag2,ActivityC包含Frag3。 到目前为止,我们没有考虑任何与Android开发人员指南中提供的新闻阅读器示例显着不同的内容。 唯一的主要区别是有三个片段,而不是两个。 […]
我已经实现了FragmentPagerAdapter ,并使用List<Fragment>来保存ViewPager所有片段。 在addItem()我只需添加一个实例化的Fragment ,然后调用notifyDataSetChanged() 。 我不确定这是否有必要。 我的问题只是…从片段1开始 [Fragment 1] 添加新的片段2 [Fragment 1] [Fragment 2] 删除片段2 [Fragment 1] 添加新的片段3 [Fragment 1] [Fragment 2] 添加新的片段时,一切似乎都很棒。 一旦我删除一个片段,然后添加一个新实例化的片段,旧的片段仍然显示。 当我去.getClass.getName()它给了我片段3的名字,但我仍然看到片段2。 我相信这可能是与instantiateItem()或类似的问题,但我认为适配器是为我们处理。 任何build议将是伟大的。 适配器代码… public class MyPagerAdapter extends FragmentPagerAdapter { public final ArrayList<Fragment> screens2 = new ArrayList<Fragment>(); private Context context; public MyPagerAdapter(FragmentManager fm, Context context) { super(fm); this.context = context; } […]
您好我正在看Android的网站上的以下片段的例子。 http://developer.android.com/guide/components/fragments.html#Example 我想知道为什么某些方法被执行。 为什么detailsFragment例子,在detailsFragment是执行下面的方法: public static DetailsFragment newInstance(int index) { DetailsFragment f = new DetailsFragment(); // Supply index input as an argument. Bundle args = new Bundle(); args.putInt("index", index); f.setArguments(args); return f; } 你不能也简单地实例化DetailsFragment并使用setter方法来设置index 。 绕过整个setArguments 。 首先使用setArguments什么意义? 你能不能只使用setters和getters?
我有一个数据加载系统build立使用自定义加载程序和游标,从活动和片段很好的工作,但没有LoaderManager(我可以find)在服务。 有谁知道为什么LoaderManager被排除在服务之外? 如果不是有解决这个问题的方法吗?
根据我的研究,后台的概念和它们是如何存在有一个重大的不同: 活动:: 当activity放置到activities的后台时,用户只需按下backbutton即可导航回前一个活动。 Activity可以独立存在。 分段:: 当一个fragment被放置到活动中时,我们必须通过在fragment transaction调用addToBackstack()来请求保存实例。 Fragment必须在活动内部生存 还有其他的区别吗?
我有一个应用程序使用片段,我正在玩如何在一个活动中使用同一个片段,双窗格和一个活动作为一个独立的。 仍然不确定完成这个最好的方法,但我注意到FragmentManager有一个putFragment和getFragment函数。 我感到困惑的是,你必须提供一个Bundle作为参数来获取和放置函数。 如何分开活动有相同的捆绑? 显然你可以通过捆绑作为参数,但在这一点上,我觉得你只是把事情弄得一团糟。 那么使用getFragment和putFragment的好方法是什么? 请包括Bundle参数说明。
我在Honeycomb开发了一个应用程序,我正在使用碎片。 这是我的应用程序 我有一个活动(说A1),并在那里有一个片段 最初这个片段持有对象一个片段对象说(F1) 然后根据用户的操作,它可能会改变到其他对象F2,F3 …. 我的问题是什么 当用户旋转设备时,活动被重新创build,并且使得F1成为片段对象,即使在旋转之前没有 What is the way to retain the fragment object while rotating? 我用setRetainInstance(true); 但它对我没有用 而我已经通过我的onCreate函数中的代码添加了片段 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); Fragment homeFragment = new Home(); fragmentTransaction.add(R.id.mainFragement, homeFragment); fragmentTransaction.commit(); }
当用户点击Fragment中的button时,我试图显示Toast消息。 问题是我无法访问该活动,以显示其吐司。 这里是Fragment的来源: public class FrgTimes extends Fragment { ScrollView sv; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { return null; } sv = (ScrollView)inflater.inflate(R.layout.frg_times, container, false); btnTime1.setOnClickListener(new OnClickListener() { public void onClick(View v) { //****** HERE's the PROBLEM ******** Toast.makeText(<The Activity>, "Please long press the key", Toast.LENGTH_LONG ); […]
我在Fragment中使用FABbutton和RecyclerView。 这个片段是一个TabViewPager的实例。 我遇到了FABbutton的问题。 我已经把RecyclerView和fabbutton放在一个FrameLayout里,FABbutton位于右下方。 现在我面对的问题是FABbutton不完全可见。 它的一半是隐藏的,如下面的截图所示。 任何人都可以帮我解决这个问题。 提前致谢。 注意:一旦滚动,FAB正确alignment。 只有在理想的情况下(滚动完成之前)才会出现问题。 fragment.xml之 <?xml version="1.0" encoding="utf-8"?> <FrameLayout 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.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent"/> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_margin="10dp" app:backgroundTint="@color/red" android:src="@drawable/ic_done"/> </FrameLayout> tabviewpagerlayout.xml <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:layout_scrollFlags="scroll|enterAlways" /> […]
Android开发者网站有一篇关于如何使用接口进行通信的文章 : 一个Fragment及其托pipeActivity 由同一Activity托pipe的两个Fragment 我正在努力将这个概念应用于嵌套的片段 。 特别是, getActivity()或Fragment#onAttach(Activity)告诉你哪个Activity托pipe一个Fragment 。 嵌套片段的等价物是什么? “孩子” Fragment如何知道它包含在“父” Fragment中? 而不知道这一点,一个孩子的Fragment怎么能把事件传递给它的父代Fragment呢? 一个显而易见的方法是从子Fragment广播意图,并让父Fragment监听广播,但我宁愿使用基于interface的方法。