我从市场上的应用程序获取用户报告,提供以下例外情况: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1109) at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:399) at android.app.Activity.onBackPressed(Activity.java:2066) at android.app.Activity.onKeyUp(Activity.java:2044) at android.view.KeyEvent.dispatch(KeyEvent.java:2529) at android.app.Activity.dispatchKeyEvent(Activity.java:2274) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1855) at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1277) at android.app.Activity.dispatchKeyEvent(Activity.java:2269) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.widget.TabHost.dispatchKeyEvent(TabHost.java:297) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1855) […]
我试图在Android应用程序中实现导航的标签。 由于TabActivity和ActivityGroup已被弃用,我想用碎片来实现它。 我知道如何为每个选项卡设置一个片段,然后在单击选项卡时切换片段。 但是,我怎样才能有一个单独的背部堆栈为每个选项卡? 例如,片段A和B将位于Tab 1下,片段C和D位于Tab 2下面。当应用程序启动时,将显示片段A并selectTab 1。 然后片段A可能被replace为片段B.当select了片段2时,应该显示片段C. 如果select了Tab 1,则应再次显示片段B. 此时应该可以使用后退button来显示片段A. 此外,旋转设备时,维护每个选项卡的状态也很重要。 BR Martin
我有一个具有多个参数的构造函数的片段,在testing阶段一切正常,但现在约300用户下载应用程序后,我有一个exception的发生: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment make sure class name exists, is public, and has an empty constructor that is public 我的意思是我可以提供一个不同的构造函数,但这并没有太多的意义,因为我将不得不调用另一种方法来真正设置片段。 我很好奇,为什么这是偶尔发生,并不总是,也许即时使用碎片ViewPager只是错误的,因为我实例化所有的片段我自己,并将其保存到活动内的列表。 我不使用FragmentManager交易的东西,因为关于碎片Viewpager的例子不是很清楚,最后一切正常。
从文档开始: public void setRetainInstance(boolean retain) 控制是否在重新创buildActivity(例如从configuration更改)中保留片段实例。 这只能用于不在后面堆栈中的碎片。 如果设置,则在重新创build活动时,片段生命周期将略有不同: onDestroy()将不会被调用(但onDetach()仍然会,因为片段正在从它当前的活动分离)。 onCreate(Bundle)将不会被调用,因为片段不被重新创build。 onAttach(Activity)和onActivityCreated(Bundle)仍然会被调用。 我有一些疑问: 片段是否也保留其视图,或者在configuration更改时重新创build? 什么是“保留”? 当用户离开活动时,碎片会被破坏吗? 为什么它不能在后面的堆栈中使用碎片? 哪些是使用这种方法有意义的用例?
我无法更新ViewPager中的内容。 一个问题:在FragmentPagerAdapter类中,方法instantiateItem()和getItem()的关系和正确用法是什么? 我只使用getItem()来实例化并返回我的片段: @Override public Fragment getItem(int position) { return new MyFragment(context, paramters); } 这工作得很好(但据说我不能改变内容)。 所以我发现: ViewPager PagerAdapter没有更新视图 特别是在其中谈到方法instantiateItem(): “我的方法是对instantiateItem()方法中的任何实例化视图使用setTag()方法” 所以现在我想实现instantiateItem()为了做到这一点。 但我不知道我必须在那里返回(返回是Object)和getItem(int位置)的关系是什么? 目前我使用getItem来实例化片段,是不是? 但是,那么我必须把碎片放在实例variables中,或者根本不实现getItem()…? 我只是不明白这一点。 我尝试阅读参考 : public abstract Fragment getItem(int position) 返回与指定位置关联的片段。 公共对象instantiateItem(ViewGroup容器,int位置) 创build给定位置的页面。 适配器负责将视图添加到这里给出的容器,尽pipe它只能确保在从finishUpdate(ViewGroup)返回时完成。 参数 容器包含将在其中显示页面的View。 position要实例化的页面位置。 返回 返回表示新页面的Object。 这不需要是一个视图,但可以是页面的其他容器。 …但我仍然不明白他们是怎么相关的,我该怎么做。 这是我的代码。 我正在使用支持包v4。 ViewPagerTest public class ViewPagerTest extends FragmentActivity { private ViewPager pager; […]
Pre-Honeycomb(Android 3)中,每个Activity都被注册为通过Layout的XML中的onClick标签处理button点击: android:onClick="myClickMethod" 在该方法中,您可以使用view.getId()和switch语句来执行button逻辑。 随着蜂窝的引入,我把这些活动分解成碎片,可以在许多不同的活动中重复使用。 大多数button的行为是独立于Activity,我希望代码驻留在Fragments文件中, 而不必使用为每个button注册OnClickListener的旧(前1.6)方法。 final Button button = (Button) findViewById(R.id.button_id); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // Perform action on click } }); 问题是,当我的布局充气,它仍然是托pipe活动,接受button点击,而不是个别碎片。 有没有一个好方法吗? 注册片段以接收button点击? 将活动中的点击事件传递给它们所属的片段?
片段似乎是非常好的UI界面逻辑分成一些模块。 但是与ViewPager一起,它的生命周期对我来说还是很ViewPager的。 所以大师的想法是非常需要的! 编辑 看到下面的愚蠢的解决scheme;-) 范围 主要活动有一个带片段的ViewPager 。 这些片段可以为其他(子域)活动实现一些不同的逻辑,所以片段的数据通过活动内的callback接口填充。 而一切正常的第一次发射,但!! 问题 当活动被重新创build(例如在方向改变时), ViewPager的片段也是如此。 代码(你会发现下面)说,每一次创build活动,我尝试创build一个新的ViewPager片段适配器相同的片段(也许这是问题),但FragmentManager已经有所有这些片段存储的地方(?并启动这些娱乐机制。 因此,娱乐机制调用onAttach,onCreateView等“旧”片段与我的callback接口调用启动数据通过活动的实施方法。 但是这个方法指向通过Activity的onCreate方法创build的新创build的片段。 问题 也许我正在使用错误的模式,但即使Android 3 Pro书也没有太多的关于它。 所以, 请给我一个两拳,指出如何正确的做法。 非常感谢! 码 主要活动 public class DashboardActivity extends BasePagerActivity implements OnMessageListActionListener { private MessagesFragment mMessagesFragment; @Override protected void onCreate(Bundle savedInstanceState) { Logger.d("Dash onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.viewpager_container); new DefaultToolbar(this); // create fragments to use mMessagesFragment = […]
问题: ViewPager片段onResume()在片段实际可见之前被触发。 例如,我有2个片段与ViewPager和FragmentPagerAdapter 。 第二个片段仅适用于授权用户,我需要让用户在片段变得可见时使用警报对话框login。 但ViewPager创build第二个片段时,第一个是可见的,以便caching第二个片段,并使其在用户开始滑动时可见。 所以onResume()事件在第二个片段变得可见之前很久了。 这就是为什么我试图find一个事件,当第二个片段变得可见时触发,在适当的时刻显示对话框。 如何才能做到这一点?
我是相当新的使用片段。 我只是试图构build一个简单的示例应用程序使用碎片。 我的情况是,我有两个活动,每个活动中有一个片段。 第一个片段有一个edittext和一个button。 第二个片段有一个textview。 当我在edittext中input一个名字并点击button时,第二个片段中的textview应显示在第一个片段的edittext中input的名称。 我能够将第一个片段的值发送到其活动,然后从该活动发送到第二个活动。 现在我怎么在第二个片段里面使用这个值。 这里是Java代码::: package com.example.fragmentexample; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class Fragment_1 extends Fragment{ OnFragmentChangedListener mCallback; // Container Activity must implement this interface public interface OnFragmentChangedListener { public void […]
有没有一种方法可以在Android Fragment中实现onBackPressed()类似于我们在Android Activity中实现的方式? 由于片段生命周期没有onBackPressed() 。 有没有其他的替代方法来onBackPressed() Android 3.0片段中的onBackPressed() ?