Articles of android fragments

当Fragment被重新显示时,Fragment中的ViewPager丢失了它的内容

我有一个带有ViewPager的简单片段。 我正在使用最新的支持库,v4 rev18! 如果我第一次显示它,一切正常,如果我回去再次显示它,应用程序崩溃时出现以下exception: java.lang.NullPointerException at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:569) at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211) at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1281) at android.view.View.dispatchRestoreInstanceState(View.java:12043) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2688) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2694) at android.view.View.restoreHierarchyState(View.java:12021) at android.support.v4.app.Fragment.restoreViewState(Fragment.java:425) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:949) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4800) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565) at dalvik.system.NativeStart.main(Native Method) 我的简单课看起来像以下,应该是,实际上,很好…… public class RoutineDayFragment […]

共享元素转换无效

我只用这个问题做了一个github项目。 你可以从这里看到它/克隆它/构建它: https : //git.io/vMPqb 我试图让共享元素为Fragment转换工作。 项目中有两个FAB – 羽毛和平面。 羽毛和飞机是共享元素。 单击“羽化”时,将打开“SheetDialog”,并且“羽化”应为“平面”对话框设置animation。 目前它没有这样做,我试图确定原因。 值得注意的是,我在API 24上运行此function,因此在版本21以下不支持转换的问题不是问题。 任何人都可以告诉我为什么共享元素转换不起作用? 为了回应repo中的内容,有四个重要文件: 主要活动 package test.example.fabpop; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.transition.ChangeBounds; import android.support.transition.Fade; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.view.View; public class MainActivity extends AppCompatActivity { FloatingActionButton fab_feather; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fab_feather = (FloatingActionButton) findViewById(R.id.initial_fab_feather); } public […]

在PopupWindow中正确创建片段

我是Android开发的新手,对如何完成我想要做的事感到困惑。 我已经做了一些阅读和学习片段,所以我可以在各种屏幕尺寸设计之间共享布局和代码。 我已经创建了几个片段并成功使用了它们。 但我有一种情况,我希望在手机上显示正常活动中的片段,但想在平板电脑上显示PopupWindow中的片段(或类似的东西,如果有更好的选择)。 我已经设法弄清楚如何膨胀片段并在点击按钮时在PopupWindow中显示它。 我的代码如下所示: public void onClick(View v) { LayoutInflater inflater = (LayoutInflater) BrowsingActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View popupLayout = inflater.inflate(R.layout.serverconnection_fragment, null, false); connectionListPopup = new PopupWindow(popupLayout, 300, 470, true); connectionListPopup.showAtLocation(BrowsingActivity.this.findViewById(R.id.connectionListImage), Gravity.CENTER, 0, 0); } popup窗口显示并包含serverconnection_fragment.xml中描述的UI。 问题是,通过这种方式创建,Fragment类ServerConnectionFragment.java永远不会被实例化,因此我的UI中的列表中没有项目,按钮上没有监听器,等等。 似乎应该有一种方法让我实例化java类,让它正常膨胀片段并附加事件监听器,然后将创建的视图传递给PopupWindow构造函数,但我无法弄清楚如何。 谁能帮我吗? 仅供参考,我正在使用Android-support-v4.jar文件为Fragment类构建Android 2.1。

如何在ListFragment上实现pull刷新

我正在尝试在ListFragment上实现“pull to refresh”,但是现在没有一个库中的下降似乎支持它。 没有办法检测列表片段上的过度滚动,我可以看到,所以我想知道是否有人find了让这个工作的方法? – 使用Christian的提示我使用以下内容作为onCreateView()方法。 @Override public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { PullToRefreshListView listView = new PullToRefreshListView(getActivity()); mAdapter = new HomeTweetListAdapter(getActivity(), R.layout.tweet_list_item, tweets); listView.setAdapter(mAdapter); return listView; } 就像克里斯蒂安说的那样,你只能用片段做到这一点。 返回ListFragment上的ListView以外的任何错误。 编辑:澄清我正在使用Johan的PullToRefresh库

Android Studio无法解析符号’TabLayout’

无法解析符号TabLayout? 如何清除此错误? 请帮帮我。 我已经导入了import android.support.design.widget.TabLayout;

android兼容包 – 片段…没有附加到Activity

您好,我正面临这个问题:我正在使用兼容包在Android应用程序中使用片段(min SDK 2.1)。 片段有时会发生随机exception,我无法弄清楚原因。 这是我收到的堆栈跟踪: java.lang.IllegalStateException: Fragment FeedListFragment{438a54e8} not attached to Activity at android.support.v4.app.Fragment.getLoaderManager(Fragment.java:715) at com.myappli.ui.FeedListFragment.refreshUpdateDate(FeedListFragment.java:283) at com.myappli.ui.phone.FeedListActivity.onReceiveResult(FeedListActivity.java:277) at com.myappli.data.rssplayer.service.KTDetachableResultReceiver.onReceiveResult(KTDetachableResultReceiver.java:55) at android.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:43) at android.os.Handler.handleCallback(Handler.java:587) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:4425) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) at dalvik.system.NativeStart.main(Native Method) 这是我在Fragment类中调用的相应代码: public class FeedListFragment extends ListFragment implements LoaderManager.LoaderCallbacks, FeedListCursorAdapterListener { … public void […]

ViewPager,其中一个页面包含多个片段“java.lang.IllegalArgumentException:找不到id的视图”

在我的小型Android应用程序中,我有一个包含3个页面的ViewPager ,每个页面包含一个片段,这些片段都可以正常使用FragmentStatePagerAdapter (参见前面的问题 )。 现在对于更大的屏幕,我想保留一个ViewPager ,但我希望前两个片段在同一个第一页上。 为此,我实现了我自己的PagerAdapter,这主要是工作,我试图解决的唯一问题是当我旋转屏幕时,我收到一个错误: 12-11 16:34:13.526: ERROR/AndroidRuntime(9221): FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.matthieu/com.matthieu.TestActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f030002 (com.matthieu:id/top_fragment) for fragment TestFragment{481a3a98 #0 id=0x7f030002} at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3815) at android.app.ActivityThread.access$2400(ActivityThread.java:125) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2037) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:4627) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871) […]

替换片段具有错误的高程值

你好再次堆栈溢出。 我有另一个片段问题。 (我正在使用android.app.Fragment而不支持片段) 我正在尝试更换片段。 但这不像使用那么简单: fragmentTransaction .replace(containerId, newFragment) .addToBackStack(“unique tag”) .commit() 为什么不? 好朋友,这是因为我的newFragment有一个过渡animation。 animation在哪里定义? 另一个很棒的问题,它在片段onCreateAnimator()中定义 为什么在那里定义? 可以find原因的长答案: 嵌套片段转换不正确 。 现在你需要相信这就是我的项目需要做的事情。 animation是做什么的? 从屏幕边缘到其中心的简单滚动,完全覆盖原始片段。 请记住,在这种情况下,旧片段只是坐在原地。 它具有不移动的animation效果。 问题是什么? 问题是newFragment似乎比旧版本具有更低的高程(或z?)值。 因此,无法观察到过渡,因为旧片段位于新片段上方。 到达animation持续时间结束时,您会看到新片段在旧片段上方闪烁。 我期望newFragment从animation开始就覆盖旧版本。 为什么不使用添加? 这似乎会产生更多问题,因为我有很多片段要交换进出视图。 使用add似乎会在下次使用replace时触发它们的退出animation,即使前面有1 … n个片段。 他们也不会停顿。 为什么不设置高程? 因为我支持没有提升属性的api 19。 为什么不对api 19使用ViewCompat.setElevation()? 我尝试了它并且有相同的失败结果。 有没有人find解决这个问题的方法?

模式何时使用活动过渡与动态碎片

在Android活动与片段中如何处理UI转换有任何模式吗? 我目前正在寻找一个在Landscape中最多有3列的UI。 我希望用户界面从屏幕上的1列开始,然后在第二列中选择移动的内容,然后在平板电脑和手机上点击第3个第二个淡入淡出的内容并淡出第1列在手机上。 我想知道什么时候我应该这样做作为一个活动过渡,当我应该使用片段与出现的视图。 据我所知,片段可以转移到其他活动,所以我的选择是实现具有静态列布局的活动,然后转换将片段与它们一起使用,或者让一个Activity包含所有3列,并让Activity管理出现的片段。 这两种方法都可行,但我对两种解决方案的多种角度都有利有弊。 有两个问题类似于我的要求,但不完全回答我的问题 带有Fragments和Separate活动的两个面板UI Android Honeycomb:布局问题 – 隐藏/显示FrameLayouts

LoaderManager的范围是什么?

在LoaderManager中识别装载程序时,使用唯一ID。 我问的是这些ID有多独特。 每个活动和片段都有自己的LoaderManager吗? 片段是否使用它们所附加的Activity的LoaderManager? 应用程序是否只拥有一个LoaderManager? 如果您能告诉我如何更改您正在使用的LoaderManager,可以获得奖励积分。 如果我希望我的Activity中的每个片段都使用相同的LoaderManager(其中一些是拉相同的数据并且共享Loaders会很好),那可能吗?