Articles of android fragments

使用Rxjava Android从Activity更新片段

我有一个简单的用例,其中: Activity1创建一个fragment1 创建后的fragment1通知活动它是否已创建并更新其activity1视图。 获取通知更新fragment1视图后的activity1。 我正在使用rxandroid,sublibrary rxlifecycle组件和android,但我还在学习阶段,stackoverflow上甚rx-lifecycle没有rx-lifecycle标签,所以我仍然在努力理解这个库的流程.. 编辑 我不喜欢使用EventBus,就像每个人大喊大叫做某事一样,所以Rxjava Observable方法会很有用

获取后栈中的最后一个片段

我看过这篇文章,但这里发布的解决方案对我不起作用: 在backstack中获取最新的片段 当我替换另一个片段时,我使用: FragmentManager manager = getSupportFragmentManager(); FragmentTransaction ft = manager.beginTransaction(); ft.replace(android.R.id.tabcontent, fragment, tag); ft.addToBackStack(null); ft.commit(); 所以,请注意我正在使用标签来检测任何片段。 我的问题尤其如下: 假设我有fragment_A,fragment_B和fragment_C。 我可以从fragment_A或fragment_B获取fragment_C,并且根据调用的父级,我必须做一些特别的事情。 所以,我再次需要恢复后堆栈中的最后一个FRAGMENT。 当我尝试做: FragmentManager fm = getSupportFragmentManager(); for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){ String ide = fm.getBackStackEntryAt(entry).getName(); Log.i("TAG", "Found fragment: " + ide); } 我得到零。 如果我使用getId()代替,我得到数字,所以我尝试做: int id = fm.getBackStackEntryAt(entry).getId(); Fragment fragment = fm.findFragmentById(id); […]

Android:在片段中放置活动的onCreate()代码的位置?

我将所有活动转换为Fragments,以便我可以在ViewPager中使用它们。 我已经搜索了这个,但我找不到令人满意的答案,所以这就是我在这里问的原因。 在我的活动中,我在onCreate()方法中编写了一些代码。 我例如调用一些findViewById()来将一些xml按钮链接到我的Activity。 我还在onCreate()中使一些视图不可见,设置OnClickListener() ,用文本填充TextView并删除通知,所有这些都在onCreate()方法中。 我的问题是:我应该把这段代码放在片段中? 在onCreate()? onCreateView()? onActivityCreated()? 为什么? 提前谢谢了!

如何从managedQuery转换到LoaderManager / CursorLoader?

我正在开发一个针对API级别8(2.2,Froyo)的Android应用程序。 我正在使用ContentProvider ,这很简单,我正在使用SimpleCursorAdapter填写我的列表视图,但我在SimpleCursorAdapter的文档中注意到,不推荐使用以下注释的无标记构造函数: 不推荐使用此构造函数。 不鼓励使用此选项,因为它会导致在应用程序的UI线程上执行Cursor查询,从而导致响应能力较差甚至应用程序无响应错误。 作为替代方案,使用带有CursorLoader的LoaderManager。 由于我的目标是API级别8,因此LoaderManager与Activity无关。 兼容包中的FragmentActivity类执行此操作,但我没有使用Fragments。 我的问题是:我应该如何在针对11之前API级别的应用中使用LoaderManager/CursorLoader ? 我是否被迫转换到Fragments,或者我应该回到不推荐使用的SimpleCursorAdapter构造函数(但是使用AsyncTask来保持UI线程友好,这就是CursorLoader应该做的事情)?

差异FragmentPagerAdapter和PagerAdapter

我阅读了android pageadapter和fragmentpageadapter的文档,但我没有看到任何区别。 我的意思是一个是片段,一个不是,但是……就是这样吗? 我对片段没有太多经验,所以也许这就是为什么我没有注意到任何差异。 那么,如果我使用FragmentPagerAdapter或PagerAdapter,那么差异是什么?

Android片段oncreateview调用了标签更改

我已经在Android上工作了一段时间,但片段对我来说有点新鲜(因为它们可能是大多数人)。 无论如何,我有以下代码,它工作正常。 我有三个片段,每个标签一个。 我想知道每次切换标签时是否正常调用onCreateView,这样做是否有意义? 每次选项卡更改时,是否应该有一种方法不重绘片段? 我正在从一个有三个活动的应用程序中转换它,每个选项卡一个,每次选项卡更改时重新创建视图似乎都是浪费,以前在选项卡更改之间存在视图就好了。 。 顺便说一下,这段代码来自: http : //thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/ public class Tabs extends FragmentActivity implements TabHost.OnTabChangeListener { final String MAP_TAB = “Map”; final String IMAGES_TAB = “Images”; final String SETTINGS_TAB = “Settings”; TabHost mTabHost; HashMap mapTabInfo = new HashMap(); TabInfo mLastTab = null; private class TabInfo { private String tag; private Class clss; […]

以编程方式全屏制作片段

我有一个ViewPager和FragmentPagerAdapter在一个活动中设置3个片段。 所有片段同时加载并使用保存在内存中 mPager.setOffscreenPageLimit(2); 其中一个片段包含我想要全屏显示的相机预览,没有状态栏或操作栏。 其他片段要求显示操作栏。 如何在保持其他两个片段正常的同时,仅将相机预览片段全屏显示? 我尝试过使用主题,这意味着打破了操作栏。 以编程方式调用以下内容没有帮助,因为它强制整个活动全屏(因此其他两个片段随之而来): requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); 我也尝试过实现ViewPager.OnPageChangeListener: public void onPageSelected(int position) { if(position == 1) getActionBar().hide(); else getActionBar().show(); } 这确实隐藏了操作栏,但它没有隐藏系统状态栏(我正在谈论通知,状态图标和时间的位置),并且操作栏隐藏/显示animation在滑动时也非常不连贯。 有关我想要做的事情的一个例子,请参阅Snapchat – 他们设法完美地完成相机和其他片段之间的滑动。 编辑: 所以我将onPageSelected更改为: public void onPageSelected(int position) { if(position == 1) { MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); MainActivity.this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); } else { MainActivity.this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); } } 这使我可以更改状态栏是否显示。 但是,它会造成大量的猛击。 操作栏的问题相同。 我注意到在Snapchat中状态栏在标签更改完成后上下滑动。 我不确定如何实现这一点,所以有关这方面的任何建议将不胜感激。

Fragments中的`onViewStateRestored`如何工作?

我真的很困惑片段的内部状态。 如果另一个片段出现,我有一个Activity只能同时保存一个Fragment并替换它。 只有在调用onSaveInstanceState的Activity(在我的情况下不调用)时,才会调用onSaveInstanceState文档。 如果我停止我的片段,我会将自己的状态存储在一个单身人士中(是的,我知道我也讨厌单身人士,但这不是我的想法)。 因此,我必须重新创建整个ViewHirarchy ,创建新视图(使用关键字new ),恢复其状态并在onCreateView返回它们。 我在这个View中也有一个Checkbox,我明确地不想存储它的状态。 然而, FragmentManager想要“智能”并使用我从未创建过的Bundle调用onViewStateRestored ,并“恢复”旧CheckBox的状态并将其应用于我的新CheckBox。 这引发了很多问题: 我可以从onViewStateRestored控制包吗? FragmentManager如何获取(可能是垃圾收集的)CheckBox的状态并将其应用于新的CheckBox? 为什么它只保存Checkbox的状态(不是TextViews ??) 总结一下: onViewStateRestored如何工作? 注意我正在使用Fragmentv4,因此onViewStateRestored不需要API> 17

ViewPager中多个片段之间的通信对象

我在ViewPager有5个片段,用于逐步填充业务对象和几个字段,在每个步骤中将设置一些字段。 我读过许多关于片段之间的通信的文章,但是我对其他人喜欢的方式感觉不舒服,所以在考虑如何在我的情况下做这个,最后我开始考虑使用所有片段可以轻松访问的单例模型对象到它的领域并按特定步骤填写它们。 由于我是android的新手,我想听听专家关于使用单例而不是在实现的接口之类的片段之间传递数据(看起来它太复杂且难以维护)。 任何建议都会有所帮助。

Android Datepicker Fragment – 当用户设置日期时如何做某事?

我在这里按照教程: http : //developer.android.com/guide/topics/ui/controls/pickers.html 我得到了工作,而日期选择器出现了。 但是,我被困在如何在用户设置日期时采取行动。 我看到他们有这种方法: public void onDateSet(DatePicker view, int year, int month, int day) { // Do something with the date chosen by the user } 但是,如果我在其中添加任何代码,则无效。 我不熟悉Java所以我不确定需要哪些额外的代码来更新具有所选日期的textview。 我确实添加了这段代码: private DatePickerDialog.OnDateSetListener mDateListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int month, int day) { updateDate(year, month, day); } }; […]