问题标签 [fragmentstatepageradapter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 如何使用指定页面打开 ViewPager。(默认情况下它加载第 3 页)
我使用代码:
而且我看到我的适配器为页面 0,1,2 加载片段,然后才为页面 nr 6 加载片段。我怎样才能阻止它加载片段 0,1,2 并使其加载片段 5,6,7,因为它应该? (BrochurePagerAdapter 扩展了 FragmentStatePagerAdapter)
android - FragmentPagerAdapter and FragmentStatePagerAdapter
I am currently thinking which implementation of PagerAdapter should I use. I've got dilemmas connected to both of them. Let me show you what are these.
1# FragmentPagerAdapter
Works fine, It creates new instances of fragments when none previous instances are available and retrieves previously fragments when there's such opportunity.
I've read recently on StackOverflow that, method PagerAdapter's
getItem()
method is called ONLY when it need to create fragment, but - it is called over and over and I had to handle creating new instances and retrieving old ones inside this method's body.
BUT - Only few callback and life-cycle methods are called. For example I can't manage to onSaveInstanceState
to be called. So there's no way to save fragment's state - of course I can use SharedPreferences
or something else, but I wanted to use callback methods. Is there any way to accomplish that?
2# FragmentStatePagerAdapter
Works perfectly, saves state of every fragment that ViewPager
holds.
BUT - this PagerAdapter
ALWAYS creates new fragment. I checked it inside constructor.
Isn't that inefficient? I saw Romain Guy on Google I/O materials saying that creating new Views
is not efficient, especially when we creating lots of Views
like in ListView
so we use convertView
to retrieve existing View
and change it for our purposes as many times as we want to. So fliping between pages is quite similar - many new Views
- because fragment is a some kind of View
In both PagerAdapters
I tried trick with Overriding destroyItem()
method but It didn't work at all.
And here's my question.
What should I do?
Should I use SharedPreferences
and option #1 with FragmentPagerAdapter
or option #2 with FragmentStatePagerAdapter
?
Is there any possibility, that I do something wrong within these adapters, to they behave not as we expect to?
Below is my code divided into "readable" parts
PagerAdapter part #1:
PagerAdapter part #2:
PagerAdapter part #3:
ViewPager code:
android - 从 FragmentStatePagerAdapter 获取资源
在一个活动类中,我有这个类(来自 android 示例):
我想改变这个:return "Title n°" + (position + 1); to: return getActivity().getResources().getString(R.string.questionTabTitle) + (position + 1);
但是活动是未定义的。我怎样才能得到我需要的字符串资源?
android - Android:除了第一个 ViewPagers 之外的所有内容都是不可见的
我正在尝试通过膨胀 XML 将 View Pagers 动态添加到我的应用程序中。所有视图寻呼机和相应的适配器都被正确实例化,并且所需的片段也被附加。但是,只有第一个视图寻呼机的片段是可见的。对于其他视图寻呼机,我什至可以从一个片段滑动到下一个片段。它们只是不可见。
TestFragment 的 onCreateView 和 onAttach 方法
和 TestFragmentPagerAdapter 的 getItem 方法
这是视图寻呼机布局
最后,这是日志。它表明,当我在第二个视图寻呼机上滑动时,会附加一个新片段,就像第一个视图寻呼机一样。我什至检查了所有寻呼机和适配器的变量状态,但我看不出第一个寻呼机与其他寻呼机有何不同。
上面的日志仅适用于 2 个视图寻呼机,但对于任意数量的适配器,结果都是相同的。
如果我将所有视图寻呼机直接添加到 XML 而不是膨胀,它们都会毫无问题地显示。
编辑
由于我没有足够的声誉来发布屏幕截图,这就是它的样子。正如我之前提到的,第一个视图寻呼机中的片段是可见的。但是,正如您在下面看到的,它们在第二视图寻呼机中不可见,即使它们已正确连接并且我可以滑动它们。
android - 类未找到片段活动的异常android
我正在研究片段活动以在姜饼操作系统上工作。当我尝试在姜饼模拟器上运行应用程序时,应用程序由于ClassNotFound
错误而被强制关闭。我在下面提供我的主要片段活动代码
一种和平的帮助将是可观的。
清单看起来像这样
logcat 是
片段活动的xml布局文件如下
再次提前感谢
android - 防止 ViewPager 总是在位置 0 实例化 Fragment?
我正在使用FragmentStatePagerAdapter
and ViewPager
,默认起始页面为 0。我希望我的页面从任意页面开始,比如 5。这就是我显示 ViewPager 的方式:
但是,ViewPager 首先是在默认位置 (0) 创建的,然后切换到我想要的位置 (5)。所以我的片段是按以下顺序创建的:0、1、4、5、6。
我根本不希望创建 0 和 1 的片段。我怎样才能做到这一点?
android - 更新 FragmentStatePagerAdapter 中的视图/幻灯片(片段) - 简单的重新排序
我尝试使用扩展的 FragmentStatePagerAdapter 和扩展的 FragmentPagerAdapter 来实现我正在尝试的东西,但似乎都不起作用。我正在从我的服务器发送一个 JSON 对象以填充 android 客户端上的对象模型。在第一次加载时,一切正常,我可以从头到尾很好地浏览页面。这是我的对象模型:
ContestEntriesModel.java
如您所见,有一个 ContestEntryModel 数组。这些模型中的每一个都如下所示:
ContestEntryModel.java
如上所述,当第一个数据有效负载从服务器下来时,我在 ContestEntryModel[] 数组中的每个项目中填充一个片段,其中包含来自该模型的数据(包括来自互联网资源 (ImageUrl) 的图像),并且效果很好. 我可以滑动直到我的手指流血,世界上一切都很好。
我现在正尝试从服务器向下发送另一个有效负载,其中数组中的项目以不同的顺序(我最终也会添加新项目,但一次一步)。我在 StackOverflow 上搜索了一个解决方案,昨天发布了一个问题,让我接近了我需要的地方(感谢 Reinier),但我仍然在努力让我的所有片段重新排序并拥有适配器完全刷新新订单。适配器似乎缓存了一些幻灯片(与我当前正在查看的幻灯片相邻的那些)并且它们不会“刷新”,直到我将一些图像滑过它们然后返回。昨天的麻烦是当新数据从我正在工作的服务器上下来时,当前查看的幻灯片无法“刷新”......有点。让' s 说我的数组中有 7 个项目,我在第一次加载时滑动到幻灯片 #3(索引 2)。然后我从服务器推送新数据,该服务器只是对数组进行反向排序。当前查看的幻灯片(幻灯片#3)然后应该移动到索引位置 4,我应该只能向右滑动 2 次(索引位置 5 和 6)。相反,它正在记住该幻灯片的当前索引位置(索引 2)并将其保留在那里。正如我上面所说,幻灯片 #2(索引 1)和幻灯片 #4(索引 3)也正在维护中。我的预期行为是这些幻灯片应该围绕幻灯片#3(索引 2)反转位置。当前查看的幻灯片(幻灯片#3)然后应该移动到索引位置 4,我应该只能向右滑动 2 次(索引位置 5 和 6)。相反,它正在记住该幻灯片的当前索引位置(索引 2)并将其保留在那里。正如我上面所说,幻灯片 #2(索引 1)和幻灯片 #4(索引 3)也正在维护中。我的预期行为是这些幻灯片应该围绕幻灯片#3(索引 2)反转位置。当前查看的幻灯片(幻灯片#3)然后应该移动到索引位置 4,我应该只能向右滑动 2 次(索引位置 5 和 6)。相反,它正在记住该幻灯片的当前索引位置(索引 2)并将其保留在那里。正如我上面所说,幻灯片 #2(索引 1)和幻灯片 #4(索引 3)也正在维护中。我的预期行为是这些幻灯片应该围绕幻灯片#3(索引 2)反转位置。
这是我的 PagerAdapter 的实现(这是 FragmentStatePagerAdapter 而不是 FragmentPagerAdapter 的版本:
ScreenSlidePagerAdapter:
目前我正在为适配器的活动设置一个静态属性(我在其他一些“外部”类中使用它),如下所示:
主要活动:
当一个新的数据加载从服务器上下来时,我只是将我的静态属性(条目)设置为新版本。我还尝试访问 PagerAdapter (条目)中的公共属性以直接修改它,但由于某种原因无法访问(即使类和属性都具有公共访问器)。我认为这就是问题所在,因为这是我需要修改的那个实例,但老实说,我的大脑在这一点上被炒了,我只是不确定。这是我用于更新的代码:
更新代码:
因此,使用它,它确实让我保持在当前幻灯片上(这是我需要的),但该幻灯片没有如上所述正确重新定位,其他相邻幻灯片也没有“刷新”。同样,假设我在幻灯片 #3 上,如果我在旧幻灯片 #2 仍然存在时向左滑动。如果我向左滑动两次,幻灯片 #1 会更新为“新”幻灯片(第一次加载的幻灯片 #7)。如果我再向右滑动一次,幻灯片#2 仍然存在(应该是幻灯片#6)。如果我然后再次向右滑动,我需要维护的“原始”幻灯片现在被替换为幻灯片 #5(同样,该数字来自原始负载)。如果我一直向右滑动到“新”幻灯片#5,我会再次看到原始幻灯片。那是它需要在新数据加载的位置,在那个位置。
我真诚地为这堵文字墙道歉,但我想如果我能提供尽可能多的代码,这会更有意义。我已经阅读了几种不同的方法来解决这个问题,但我无法解决任何特别适合我需求的方法。
任何建议/代码帮助将不胜感激。
android - 轮换后,片段事务给出 IllegalStateException
我对 Fragments 和 BroadcastManager 有疑问。在我的应用程序中,我切换到一个主要活动并使用新的 NavigationDrawer。所有内容都包含在片段中。
一个片段(搜索用户)包含两个选项卡(按名称搜索、按条件搜索),使用来自 Android 设计网站的导航模式“横向导航”:它有一个带有 FragmentStatePagerAdapter 的 ViewPager。
我希望两个选项卡都使用相同的操作栏(选项)菜单:搜索操作。但只有活动片段才能对其做出反应。
我尝试了不同的方法,最烦人的是我无法直接从视图寻呼机轻松获取当前片段(不依赖非 API 实现细节)。
方法
我现在使用 LocalBroadcast 来通知片段已单击搜索。每个片段在 onResume 中注册一个小的 Wrapper-Receiver(并在 onPause 中将其删除),它将 onReceive 转发给片段本身(如下所示的方法)。我重写setMenuVisibility
which 是 FragmentStatePagerAdpater 在 Fragments 上调用的回调,以了解哪个是活动片段。只有菜单集可见的片段才会对广播做出反应。
两个片段都会触发片段事务以显示搜索结果并将其添加到后台堆栈。
问题 片段事务通常工作,但是当我旋转设备然后按搜索时,我得到一个 IllegalStateException(在 onSaveInstanceState 之后无法提交)。
我试图将提交更改为commitAllowingStateLoss
,但随后我得到一个带有“活动已被破坏”的 IllegalStateException。
你知道这里出了什么问题吗?我很茫然怎么办...
附加代码:
MainActivity onCreate(基于 NavigationDrawer 示例)和 selectItem
故障选项卡式片段中的 FragmentStatePagerAdapter:
该项目的精简版仅包含必需品,发布在https://docs.google.com/file/d/0ByjUMh5UybW7cnB4a0NQeUlYM0E/edit?usp=sharing
如下重现它: 启动,您会看到两个选项卡。选择其中一个并单击 ActionBar 中的 Search -> Fragment transaction works。使用返回键,旋转设备并重复 -> 崩溃![在赏金结束或发现错误后,该文件可能无法访问。]
编辑:(1)阐明 onReceive 存在于片段的上下文中(2)为主要活动添加了代码
delay - 在 Fragment Pager Adapter 中延迟显示内容
我正在使用 FragmentPagerAdapter 有 5 个选项卡。在标签号 3 中,我在列表视图中显示来自 Web 服务的数据,并且它显示成功。当我滑动到选项卡 2、4 并返回到选项卡 3 时,数据仍显示在列表视图中。如果我滑动到选项卡 1、5 并返回到选项卡 3,数据会延迟出现几秒钟。
*在 TabFragment 类中,我将 AsyncTask 类称为“GetTopNotifications”。像这样的编码:
android-viewpager - 嵌套片段 + FragmentStatePagerAdapter
我正在尝试使用 FragmentStatePagerAdapter(因为动态添加片段)将 Fragment(父片段)与 View-Pager 一起使用,并在视图寻呼机的不同页面中从 youtube 获取视频。当在查看寻呼机片段(嵌套片段)中单击 youtube 视频时,父片段将被另一个播放相应 youtube 视频的片段替换。
我能够在 2 个片段(包含视图寻呼机的片段和包含 youtube 播放器的片段)之间来回移动。但是经过一些来回移动后,我的应用程序由于stackoverflow 错误而崩溃
在搜索各种博客并在堆栈溢出中发布后,我发现我的嵌套片段没有从后堆栈中弹出。我已经尝试过这样的解决方案 -
其中 fragment 是包含 view-pager 但应用程序仍然崩溃的片段。
以下是我的崩溃报告和相关代码
崩溃报告-
07-05 16:49:24.033: E/ACRA(32192): org.pckg.name 致命错误: null 07-05 16:49:24.033: E/ACRA(32192): java.lang.StackOverflowError 07-05 16 :49:24.033: E/ACRA(32192): 在 android.text.TextLine.handleText(TextLine.java:747) 07-05 16:49:24.033: E/ACRA(32192): 在 android.text.TextLine。 handleRun(TextLine.java:898) 07-05 16:49:24.033: E/ACRA(32192): 在 android.text.TextLine.measureRun(TextLine.java:414) 07-05 16:49:24.033: E/ ACRA(32192): 在 android.text.TextLine.measure(TextLine.java:293) 07-05 16:49:24.033: E/ACRA(32192): 在 android.text.TextLine.metrics(TextLine.java:267 ) 07-05 16:49:24.033: E/ACRA(32192): 在 android.text.Layout.getLineExtent(Layout.java:977) 07-05 16:49:24.033: E/ACRA(32192): 在 android .text.Layout.drawText(Layout.java:329) 07-05 16:49:24.033: E/ACRA(32192): 在 android.text.Layout.draw(Layout.java:205) 07-05 16:49 :24.033:E/ACRA(32192): 在 android.text.BoringLayout.draw(BoringLayout.java:400) 07-05 16:49:24.033: E/ACRA(32192): 在 android.widget.TextView.onDraw(TextView.java :5030) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13712) 07-05 16:49:24.033: E/ACRA(32192):在 android.view.View.getDisplayList(View.java:12650) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16 :49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup。 drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16: 49:24.033: E/ACRA(32192): 在 android.widget.AbsListView.dispatchDraw(AbsListView.java:2327) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw (View.java:13715) 07-05 16:49:24.033: E/ACRA(32192): 在 android.widget.AbsListView.draw(AbsListView.java:3653) 07-05 16:49:24.033: E/ACRA (32192): 在 android.view.View.getDisplayList(View.java:12650) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.看法。ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java :12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192):在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16 :49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13715) 07-05 16:49:24.033: E/ACRA(32192): 在 android.support.v4。 view.ViewPager.draw(ViewPager.java:2153) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12650) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw (View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA (32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android. view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49: 24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View。getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java:2928 ) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android .view.View.getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49 :24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild( ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033:E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java :12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192):在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16 :49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13715) 07-05 16:49:24.033: E/ACRA(32192): 在 android.widget.FrameLayout。 draw(FrameLayout.java:467) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12650) 07-05 16:49:24.033: E/ ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA(32192): 在android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648) 07-05 16: 49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.draw (View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ACRA (32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648)在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648) 07-05 16 :49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View。 draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648 )在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648) 07-05 16 :49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12694) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View。 draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java:2928) 07-05 16:49:24.033: E/ ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.View.getDisplayList(View.java:12648 )E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java :2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192):在 android.view.View.getDisplayList(View.java:12648)E/ACRA(32192): 在 android.view.View.draw(View.java:13428) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.drawChild(ViewGroup.java :2928) 07-05 16:49:24.033: E/ACRA(32192): 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797) 07-05 16:49:24.033: E/ACRA(32192):在 android.view.View.getDisplayList(View.java:12648)
代码- 父片段 onCreate() 方法 -
viewpager 片段 onItemClick() 代码-