Articles of android fragments

键盘隐藏片段中的EditTexts

编辑:我需要使用键盘,但它隐藏了我的EditText ,我需要它滚动所以键盘没有隐藏它。 我正在使用三星平板电脑。 我的风格: parent=”android:Theme.Holo.NoActionBar.Fullscreen” EditText字段位于可滚动视图中,如下所示: 片段布局: 活动布局: 已经提出了类似的问题,但我没有find有效的答案。 我有一个项目使用附加到一个活动的许多片段。 在我的活动清单中: android:windowSoftInputMode=”stateHidden” 一些片段需要用户输入。 在片段布局中我使用: 每个片段嵌套如下: 这很好用。 除键盘外,还会隐藏位于页面下方的EditTexts。 我一遍又一遍地读到这个: http://developer.android.com/reference/android/widget/TextView.html#attr_android:imeOptions 尝试了这些建议,但是当调用活动时键盘可见,这是我不想要的。 它也行不通。 也许是因为它是片段? SoftKeyboard隐藏EditText Android键盘隐藏了EditText 我一直在尝试制定动态解决方案。 任何帮助表示赞赏。 编辑:这是在平板电脑上使用,只有一个键盘选项,语言更改。 编辑:我的解决方案 我通过安装另一个软键盘解决了这个问题。 https://code.google.com/p/softkeyboard/wiki/HowTo

Android ListFragment不保存onSaveInstanceState()中的包/不检索onActivityCreated()中的包

我是android新手,我面临以下问题。 我正在为Android 2和3开发,这就是我使用片段的原因。 然而,为了使应用程序在Android 2设备上运行,我导入android.support.v4.app.ListFragment。 当屏幕方向改变时,我需要在ListFragment中保持选择。 我重写onSaveInstanceState()方法并将int放入bundle中。 旋转屏幕时,将调用此方法并将int添加到包中。 但是,当调用onActivityCreated()时,其bundle为null。 我正在关注Android网站上提供的示例: http : //developer.android.com/reference/android/app/Fragment.html ,但如上所述 – 在调用onSaveInstanceState()之后, onActivityCreated()的包仍然是空值。 这是代码: import android.support.v4.app.ListFragment; public class VisitsHomeFragment extends ListFragment { private int selectedPosition = -1; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (savedInstanceState != null) { if (savedInstanceState.containsKey(“SELECTED_POSITION”)) { selectedPosition = savedInstanceState.getInt(“SELECTED_POSITION”); } } } @Override public void […]

活动和片段生命周期和方向变化

我一直有非常奇怪的问题Fragments和方向更改已导致强制关闭而不遵循逻辑模式。 我创建了一个简单的Activity和Fragment生命周期调试应用程序,它通过报告对logcat的调用来简单地实现Activity生命周期和Fragment生命周期的每一步。 以下是TestActivity和TestFragment类: 测试活动 public class TestActivity extends Activity { Context ct = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e(“ACT”, “onCreate called”); ct = getApplicationContext(); FrameLayout fl = new FrameLayout(ct); fl.setId(1000); TestFragment tf = new TestFragment(); getFragmentManager().beginTransaction().add(fl.getId(), tf, “”).commit(); setContentView(fl); } @Override protected void onStart() { Log.e(“ACT”, “onStart called”); super.onStart(); } @Override protected […]

Android,谷歌地图片段和viewpager – 错误膨胀类片段

我试图在一个片段中的viewpager(fragmentpager)中使用google maps v2。 如果我刷到第四个片段(查看寻呼机),它工作正常,但如果我回到第一个片段,然后回到第四个 – 与地图 – 我的应用程序死了。 07-04 19:38:20.937: E/AndroidRuntime(20175): FATAL EXCEPTION: main 07-04 19:38:20.937: E/AndroidRuntime(20175): android.view.InflateException: Binary XML file line #13: Error inflating class fragment … 07-04 19:38:20.937: E/AndroidRuntime(20175): Caused by: java.lang.IllegalArgumentException: Binary XML file line #13: Duplicate id 0x7f050010, tag null, or parent id 0x0 with another fragment for com.google.android.gms.maps.SupportMapFragment 07-04 19:38:20.937: […]

隐藏的backstack片段在配置更改时重新显示

我正在构建一个活动多片段应用程序。 每次交易后我都会添加到backstack。 在几次隐藏和显示片段然后我旋转手机之后,容器上添加的所有片段都被恢复,每个片段都在另一个片段之上。 可能是什么问题? 为什么我的活动会显示我之前隐藏的片段? 我正在考虑隐藏所有以前隐藏的现在显示的片段,但是有更“优雅”的方式吗?

暂停时onClick或onItemClick会导致“IllegalStateException:onSaveInstanceState后无法执行此操作”

我有一个TabActivity ,它承载5x FragmentActivity 。 其中一些包含按钮或列表,在其onClick()或onItemClick()中创建并推送新片段。 在大多数情况下,这工作正常,但如果事情有点反应迟钝,或者测试人员做了一些愚蠢的事情(按住按钮或列表项,使用不同的手指切换标签,然后释放按钮/列表 – 100%可重复),我在活动暂停并保存后很快得到点击事件。 请参阅日志片段: 10-30 17:05:16.258 3415 3415 D BKC DEBUG: More.onSaveInstanceState() 10-30 17:05:16.258 3415 3415 D BKC DEBUG: MoreFragment.onPause() 10-30 17:05:17.309 3415 3415 D BKC DEBUG: MoreFragment.onItemClick() 在阅读了本文以及有关片段状态丢失的各种StackOverflow问题后,我没有看到如何解决这个问题的良好答案。 使用commitAllowingStateLoss() (无条件)是一种可以隐藏真正错误的解决方法。 我不确定在onSaveInstanceState中取消注册OnClickListener和OnItemClickListener会100%阻止这种情况,并且它是PITA为每个片段中的每个按钮执行此操作。 有人建议检查相关片段的isAdded() ,但我可以确认这不起作用。 我可以在onSaveInstanceState()和onRestoreInstanceState()设置一个标志,并在onClick()中检查,但同样,这只是一个kludge。 编辑:哦,片段没有onRestoreInstanceState() ,但我可以在onResume()或其他任何东西旋转旗帜。 是否有正确的解决方法,我错过了,或者我应该选择我的选择?

无法使用Fragment.setRetainInstance()作为Activity.onRetainNonConfigurationInstance()的替代品

根据Android API文档,不推荐使用Activity.onRetainNonConfigurationInstance()来支持Fragment.setRetainInstance() 。 但是,我遇到了两个不同的情况,Fragment.setRetainInstance()似乎不可行。 如果Fragment包含WebView。 根据Diane Hackborne的说法,您不能在配置更改中重用WebView。 我想这意味着你需要在屏幕旋转时允许Fragment拆除并重新创建WebView,并使用WebView.saveState()和WebView.restoreState()来恢复Web视图状态。 如果Fragment属于配置更改后不再存在的布局,则当FragmentManager尝试恢复Fragment时,它将抛出: java.lang.IllegalArgumentException: No view found for id 0x7f060091 for fragment 如果您在横向模式下具有双片段布局,但在纵向模式下具有单片段布局,则会发生这种情况(例如)。 当从landscape转换为portrait时,如果setRetainInstance()设置为true,则Fragment都不会被销毁,但是一个片段不再具有要重新附加的有效视图,因此是exception。 因此,如果您正在构建基于Fragment的应用程序,并且需要在配置更改之间保留数据(例如对运行的AsyncTasks的引用),并且您不能使用Fragment.setRetainInstance() ,并且没有Fragment.onRetainNonConfigurationInstance (),最好的方法是什么?

Loader将结果传递给错误的片段

我有一个基于Android开发人员示例使用ActionBar选项卡滑动选项卡的活动。 每个选项卡显示一个片段,每个片段(实际上是SherlockFragment)通过自定义AsyncTaskLoader加载不同types的远程api请求。 问题是,如果您点击一个选项卡移动2个选项卡/页面,而您要离开的选项卡的片段(旧片段)正在加载结果,则该结果将传递到您移动到的选项卡的片段(新片段)。 在我的情况下,这会导致ClassCastException,因为预期的结果是不兼容的types。 在代码中,情况的要点是: 装载机: public class FooLoader extends AsyncTaskLoader public class BarLoader extends AsyncTaskLoader 片段: public class FooFragment extends Fragment implements LoaderManager.LoaderCallbacks { … @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getLoaderManager().initLoader(0, null, this); } public Loader onCreateLoader(int id, Bundle args) { return new FooLoader(); } … } public class BarFragment extends Fragment […]

调用replace()时片段的生命周期是多少?

我有许多片段,使用以下代码动态添加: private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { selectItem(position); } } private void selectItem(int position) { // update the main content by replacing fragments Fragment fragment = null; if(position == 0){ fragment = new FirstFragment(); } else if(position == 1){ fragment = new SecondFragment(); […]

如何在单/双窗格布局中管理UI状态和后端堆栈

我无法解决如何在典型的列表细节设计模式中正确管理Fragment的问题。 我的布局工作正常,横向视图(双窗格)的结构如下: 像这样的纵向视图(单个窗格): 我还在res/values-w600dp/有一个refs.xml ,以确保根据设备的屏幕宽度加载适当的布局。 选择列表项时,横向视图应并排显示列表和详细信息,而纵向视图应仅显示全屏详细信息。 如果未选择任何内容,则横向视图应显示左侧的左侧和右侧的空白区域,而纵向视图应仅显示全屏列表。 但是,这是我遇到麻烦的地方: 我是否对列表+可选的详细信息布局使用“主” Activity ,为肖像,仅详细信息布局使用另一个“详细信息” Activity ? 这似乎是Fragments指南示例所做的。 我已经得到了这个普遍的工作,但是当方向改变时,我如何保持我的细节片段的状态? 考虑上面显示的相反情况 – 从纵向旋转到横向,同时细节可见意味着细节Activity需要finish()因此主Activity可以显示双窗格布局,但这也会破坏细节片段和它的savedInstanceState 。 如果用户在详细信息片段中的EditText字段中键入了信息,然后旋转设备,当我将其添加到主(双窗格) Activity时,如何保留详细信息片段的整个UI状态? 我是否只使用一个Activity并自己管理Fragment ? 这允许我在方向改变时保留细节UI的状态(因为Android会自动处理),但是当它返回到堆栈时会变得混乱。 考虑图像中的情况 – 当细节可见时应从横向旋转到纵向应显示单窗格显示详细信息,但如何正确管理后堆栈和ActionBar主页图标以显示列表单窗格? 旋转回到横向还需要撤消我之前执行的任何后向堆栈操作,因为两个片段将立即可见。 经过一番搜索后,我发现了两个类似的问题( 从双窗格切换到单窗格上的方向更改维护片段堆栈和保留活动之间的片段状态 ),但我的情况略有不同,因为我不是要尝试改进此function但是最好预先计划好。 我错过了什么? 当然Android可以同时管理后台堆栈(如多个Activity案例中) 和 UI状态(如单个Activity案例中),对吧?