我没有setTag(String tagName)
在Fragment
课堂上找到类似方法的东西.设置Fragment
我找到的标记的唯一方法是执行a FragmentTransaction
并将标记名称作为参数传递.
这是Fragment
通过代码显式设置标记的唯一方法吗?
我在容器Activity上使用此方法来显示BFrag
public void showBFrag()
{
// Start a new FragmentTransaction
FragmentTransaction fragmentTransaction = mFragmentMgr.beginTransaction();
if(mBFrag.isAdded())
{
Log.d(LOG_TAG, "Show() BFrag");
fragmentTransaction.show(mBFrag);
}
else
{
Log.d(LOG_TAG, "Replacing AFrag -> BFrag");
fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag);
}
// Keep the transaction in the back stack so it will be reversed when backbutton is pressed
fragmentTransaction.addToBackStack(null);
// Commit transaction
fragmentTransaction.commit();
}
Run Code Online (Sandbox Code Playgroud)
我从容器Activity中调用它; 首次:
然后我按下后退按钮:
然后我通过从同一个Activity调用showBFrag()再次前进:
所以:
编辑:这是异常的完整信息.
06-07 12:08:32.730: ERROR/AndroidRuntime(8576): java.lang.IllegalStateException: Fragment …
Run Code Online (Sandbox Code Playgroud) android fragment illegalstateexception android-fragments android-3.0-honeycomb
"Project-> Android Tools-> Fix Project Properties"Eclipse命令exaclty有什么作用?
我已经阅读了很多次使用它,主要是在与Eclipse中的Android R生成问题相关的答案中,但对我来说它就像魔术一样,我按下它并且我认为它修复了一些项目属性,但没有任何反应......没有视觉效果反馈,没有关于修复了哪些项目属性的信息......任何人都可以对它究竟做了什么有所了解?
谢谢
我为银行开发了一个巨大的应用程序.该应用程序使用户能够通过电话执行大量操作(国内和国际转移,证券,股票市场价值,警报,存款,卡更改,卡激活,支票等).
所有应用程序都运行Android本机代码,每个屏幕都是一个Activity.
现在我们正在转向Fragments ......基于这些教程,我可以继续这样做 ......我甚至已经优化了它们的流程.
但是,根据他们的建议,我将不得不创建大约100个新的Fragment类; 切换我在每个屏幕活动上的代码,并将其放在新的每个屏幕片段类中; 更新大约100个布局; 最后更新屏幕触发新屏幕的方式(使用FragmentManager而不是Intents).
也许并不困难,但繁琐乏味.
我的问题是,有人知道将100个活动应用程序移植到Fragments的快速方法比提到的教程更快吗?
谢谢
port android android-fragments android-3.0-honeycomb android-activity
它可以保留一个Fragment
活动之间?
假设我在左侧放置A
了片段活动,在右侧放置了F_Left
片段F_Right
.如果我想发布一个新的活动并保持片段F_Left
......我该怎么做?
我可以F_Left
在活动之间保留片段状态吗?
请注意,我想启动一个新的Activity,因为Fragment F_Left
是我的应用程序菜单,Fragment F_Right
完全改变了用户操作的上下文...而且我的应用程序有很多操作,所以每次操作都有一个Activity是有意义的.
我知道它可以保留Fragment
在一个内部Activity
,但由于Fragment
生命周期与容器密切相关,Activity
我不知道这是否可能保持Fragment
活动之间的状态.
android android-fragments android-3.0-honeycomb android-activity
正如Android文档所述:"活动是用户可以做的单一,重点突出的事情."
然而,对于Fragments,我们将能够在Reto Meier建议的同一个Activity中做很多"事情" .他的建议是用相同活动中的内容片段替换选择片段("在我们的代码中,这会产生一个两难").
让我们说我的应用程序是一个"更复杂",有许多活动,具有复杂的导航树,并设计了"用户可以做的单一,集中的事情"的原则.
让我们说现在我必须将它改编为Fragments和大屏幕...而且我不想创建第二个应用程序,在一个应用程序中也没有两个完全不同的逻辑(一个用于表的其他电话).
我应该有一个Activity来管理所有应用程序片段和片段事务吗?就像上面提到的Retro Meier一样.这是推荐的路径吗?从而打破了"用户可以做的单一,专注的事情"活动的原则?
或者我错过了什么?我希望 ;)
顺便说一句,我认为片段看起来很棒,但从我看到的到现在,只有你从头开始创建一个应用程序.因为使应用程序与手机和平板电脑兼容看起来有点单调乏味.希望是错的:)
Dianne Hackborn已经回答了(thx为链接mgv):
您可以将整个应用程序放在一个活动中,在该活动中,当状态发生变化时更改碎片结构
那么Activity就成了一种容器,你可以在其中插入Fragments.我喜欢这种方法,但是......在我的应用程序中,大约有30种不同的操作可用,每种操作需要执行大约2到4个屏幕步骤(表单和选择列表),所有这些操作都有所不同,并且还有导航限制.它适用于每个处理一个屏幕/步骤行为的活动.
然后,要移植到Fragments,我应该将每个屏幕逻辑移动到Fragments,并将Activities用作每个操作的容器.因此,将Activities作为管理每个操作的Fragments之间导航的对象,对吗?看起来很难适应长期应用程序.:(
当前活动定义应该改变一点btw.:)
port android android-fragments android-3.0-honeycomb android-activity
当使用add()方法添加新片段时,我遇到了"意外行为".
我想在FrameLayout上添加一个新片段,但是当我这样做时,前面的片段仍然可见.
这是使用add()方法时的预期结果吗?
这是因为我使用FrameLayout和add()方法只是在FrameLayout上放置一个片段而不影响前一个?
谢谢
我将此方法称为从AFrag转到BFrag:
showFragment()
{
FragmentTransaction fragmentTransaction = mFragmentMgr.beginTransaction();
// Add fragment to the container ContentView
fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag, mBFrag.getTag());
// Add FADE effect
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
// Keep the transaction in the back stack so it will be reversed when backbutton is pressed
fragmentTransaction.addToBackStack(null);
// Commit transaction
fragmentTransaction.commit();
}
Run Code Online (Sandbox Code Playgroud)
它显示一个新片段(BFrag),替换前一个片段(AFrag)并保留有关事务的信息,因此可以在按下后退按钮时自动撤消/撤消.
当按下后退按钮时,一切看起来都很好,显示前一个片段(AFrag).但是当我再次前进时(AFrag - > BFrag)我得到了一个"碎片已经添加了例外".
反向/撤消操作没有删除新片段(BFrag)吗?这是预期的行为吗?
这很奇怪,因为在此之后,我决定设置一张支票:
if(mBFrag.isAdded())
{
fragmentTransaction.show(mBFrag);
}
else
{
fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag, mBFrag.getTag());
}
Run Code Online (Sandbox Code Playgroud)
而且,它进入了else语句......我得到了异常.
我对你做错了什么了解吗?
谢谢.