这个问题主要是为了征求意见,处理我的应用程序的最佳方式。 我有三个片段正在处理一个活动。 片段A有一个可点击的元素的照片和片段B有4个可点击的元素的button。 另一个片段只显示点击照片的细节。 我正在使用ActionBarSherlock。 前进和后退button需要分别将照片更改为下一个或之前的姿势。 我可以将照片和button保留在同一个片段中,但是想要将它们分开以防我想重新排列在平板电脑中。 我需要一些build议 – 我应该结合碎片A和B吗? 如果没有,我将需要弄清楚如何实现3个可点击的项目的接口。 我考虑使用Roboguice,但我已经扩展使用SherlockFragmentActivity所以这是一个不行。 我看到提到Otto,但是我没有看到如何在项目中包含的好教程。 你认为最好的devise实践应该是什么? 我还需要帮助弄清楚如何在片段和活动之间进行通信。 我想在应用程序中保留一些数据“全局”,比如pose ID。 除了股票android开发者的信息,还有一些我能看到的代码示例吗? 这不是全部有用的。 顺便说一句,我已经存储了每个姿势在SQLite数据库中的所有信息。 这是很容易的部分。
我有一个包含RecyclerView (卡片列表)的DialogFragment 。 在这个RecyclerView是一个或多个CardViews可以有任何高度。 我想给这个DialogFragment正确的高度基于CardViews包含在内。 通常这会很简单,我会像这样在RecyclerView上设置wrap_content 。 <android.support.v7.widget.RecyclerView … xmlns:tools="http://schemas.android.com/tools" android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:clickable="true" android:scrollbars="vertical" > </android.support.v7.widget.RecyclerView> 因为我正在使用RecyclerView这不起作用,请参阅: https://issuetracker.google.com/issues/37001674 和 嵌套的Recycler视图高度不包裹其内容 在这两个页面上,人们build议扩展LinearLayoutManager并覆盖onMeasure() 我首先使用了第一个链接中提供的LayoutManager : public static class WrappingLayoutManager extends LinearLayoutManager { public WrappingLayoutManager(Context context) { super(context); } private int[] mMeasuredDimension = new int[2]; @Override public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, int widthSpec, int heightSpec) { […]
FragmentPagerAdapter和FragmentStatePagerAdapter什么区别? 关于FragmentPagerAdapter Google的指南说: 这个版本的寻呼机最适合用于有less量通常需要寻呼的静态片段,比如一组选项卡。 用户访问的每个页面的片段将保存在内存中,尽pipe其视图层次可能在不可见时被破坏。 这可能会导致使用大量的内存,因为片段实例可以保持任意数量的状态。 对于更大的页面集,请考虑FragmentStatePagerAdapter。 而关于FragmentStatePagerAdapter : 当有大量的页面时,这个版本的寻呼机更加有用,更像是一个列表视图。 当页面对用户不可见时,它们的整个片段可能被破坏,只保留该片段的保存状态。 与FragmentPagerAdapter相比,这允许寻呼机保持与每个被访问页面相关的更less的存储器,代价是在页面之间切换时可能会有更多的开销。 所以我只有3个片段。 但是它们都是一个单独的模块,具有大量的数据。 Fragment1处理一些数据(用户input),并通过活动传递给Fragment2 ,这只是简单的ListFragment 。 Fragment3也是ListFragment 。 所以我的问题是 :我应该使用哪个适配器? FragmentPagerAdapter或FragmentStatePagerAdapter ? 我将非常感谢您的帮助。 亚历克斯。 PS对不起,我的英文:)
您应该如何实现例如Honeycomb Gmail客户端使用的那种滑动? 可以通过添加和删除碎片自动处理这个事情,这是很难testing这是由于模拟器是一个幻灯片:)
我知道Activities被devise成代表我的应用程序的一个屏幕,而Fragments被devise成可重复使用的UI布局,其中embedded了逻辑。 直到不久以前,我开发了一个应用程序,因为它说应该开发。 我创build了一个Activity来表示我的应用程序的屏幕,并使用ViewPager或Google Maps Fragments。 我很less创build一个可重复使用多次的ListFragment或其他UI。 最近我偶然发现一个只包含2个Activities的项目,一个是SettingsActivity ,另一个是MainActivity 。 MainActivity的布局填充了许多隐藏的全屏UI片段,只显示一个。 在Acitivty逻辑中,应用程序的不同屏幕之间有许多FragmentTransitions 。 我喜欢这种方法是因为应用程序使用了一个ActionBar ,它保持不变,不会随着屏幕切换animation而移动,这是在Activity切换时发生的。 这给这些屏幕过渡更stream畅的感觉。 所以我想我所要求的是分享你关于这个话题的当前发展方式,我知道它可能看起来像一个基于意见的问题,但我把它看作是一个Androiddevise和体系结构问题…不是真的意见为主。 UPDATE(01.05.2014):继Square的Eric Burke之后(我不得不说是一个很棒的演示文稿,里面有很多android开发者的有用工具,而且我也没有任何关于Square的介绍) http://www.infoq.com/presentations/Android-Design/ 根据我过去几个月的个人经验,我发现构build我的应用程序的最佳方法是创build代表应用程序中stream的片段组,并将所有这些片段呈现在一个Activity 。 所以基本上,您的应用程序中的Activities数量与stream量数量相同。 这样一来,操作栏在所有stream程的屏幕上都保持完好,但正在通过改变stream程来重新创build,这是非常有意义的。 正如埃里克·伯克(Eric Burke)所说的那样,我也意识到,尽可能less地使用Activities的理念并不适用于所有的情况,因为它在他所谓的“上帝”活动中造成了混乱。
我有一个像这样的公共方法的片段(F1) public void asd() { if (getActivity() == null) { Log.d("yes","it is null"); } } 是的,当我调用它(从活动),它是空的… FragmentTransaction transaction1 = getSupportFragmentManager().beginTransaction(); F1 f1 = new F1(); transaction1.replace(R.id.upperPart, f1); transaction1.commit(); f1.asd(); 这肯定是我做错了,但我不知道那是什么
我有一个片段,我试图添加到视图中。 FragmentManager fragMgr=getSupportFragmentManager(); feed_parser_activity content = (feed_parser_activity)fragMgr .findFragmentById(R.id.feedContentContainer); FragmentTransaction xaction=fragMgr.beginTransaction(); if (content == null || content.isRemoving()) { content=new feed_parser_activity(item.getLink().toString()); xaction .add(R.id.feedContentContainer, content) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .addToBackStack(null) .commit(); Log.e("Abstract", "DONE"); } 当这个代码被执行时,我得到在debugging中的以下错误。 java.lang.IllegalArgumentException: No view found for id 0x7f080011 for fragment feed_parser_activity{41882f50 #2 id=0x7f080011} feed_parser_activity是一个在xml中设置为Fragment布局的片段。 我正在使用FragmentActivity来托pipe包含feed_parser_layout的片段布局。 我在上面正确地编码?
我得到错误 Unable to start activity ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment 当我通过肖像和风景模式切换。 我正在使用片段。 我的xml是: <LinearLayout android:id="@+id/mainLayout" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <ListView android:id="@+id/android:list" android:layout_height="wrap_content" android:layout_width="fill_parent"/> <fragment android:id="@+id/fragmentDetails" android:layout_height="fill_parent" android:layout_width="fill_parent" class="de.androidbuch.activiti.task.TaskDetailsFragment"/> </LinearLayout> 如果我通过横向和纵向模式切换一切正常。 但是,当我点击我的片段(我可以看到我的片段),然后切换到另一种模式,我得到的错误。 任何想法我怎么能解决它? 在这里find了一些答案,但没有一个帮助我… 06-21 14:55:05.600: ERROR/AndroidRuntime(7636): FATAL EXCEPTION: main 06-21 14:55:05.600: ERROR/AndroidRuntime(7636): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}: android.view.InflateException: […]
我有一个activity – MainActivity 。 在这个Activity我有两个fragments ,这两个fragments都是在xml中声明创build的。 我正在尝试将用户input的文本String传递给Fragment B的文本视图。 然而这certificate是非常困难的。 有谁知道我可以做到这一点? 我知道一个片段可以使用getActivity()获取对它的活动的引用。 所以我猜我会从那里开始?
我有一个应用程序,包括使用ActionBarSherlock在标签mode.I有5个选项卡,每个选项卡的内容是使用片段处理。 对于tab2,虽然我有一个片段的XML文件,其中包含一个ViewPager元素,而该元素又有一些片段页面。 当我最初启动应用程序的应用程序,我可以切换标签没有问题,但当我第二次按tab2我得到上面提到的错误。 主要活动如下: public class MainActivity extends SherlockFragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar = getSupportActionBar(); ActionBar.Tab tab1 = actionBar.newTab().setText("Tab1"); ActionBar.Tab tab3 = actionBar.newTab().setText("Tab3"); ActionBar.Tab tab2 = actionBar.newTab().setText("Tab2"); ActionBar.Tab tab4 = actionBar.newTab().setText("Tab4"); ActionBar.Tab tab5 = actionBar.newTab().setText("Tab5"); Fragment fragment1 = new Tab1(); Fragment fragment3 = new Tab3(); Fragment fragment2 = […]