小编Axe*_*cia的帖子

如何通过代码设置Fragment标签?

我没有setTag(String tagName)Fragment课堂上找到类似方法的东西.设置Fragment我找到的标记的唯一方法是执行a FragmentTransaction并将标记名称作为参数传递.

这是Fragment通过代码显式设置标记的唯一方法吗?

android android-fragments android-3.0-honeycomb

135
推荐指数
3
解决办法
16万
查看次数

片段已添加IllegalStateException

我在容器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中调用它; 首次:

  • 进入else语句,mBFrag替换为mAFrag.

然后我按下后退按钮:

  • 并且操作被反转(显示了mAFrag,但是..删除了mBFrag?).

然后我通过从同一个Activity调用showBFrag()再次前进:

  • 并且它获得了进入else语句的AGAIN.(所以我可以推断mBFrag没有添加)
  • 但我得到一个Fragment已经添加了IllegalStateException ...(那么为什么它没有进入if语句呢?)

所以:

  1. 为什么如果我已经添加了一个Fragment IllegalStateException,则isAdded()方法不会返回TRUE ?
  2. popBackStack操作是否完全删除以前添加的片段?
  3. 我误解了什么行为?

编辑:这是异常的完整信息.

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

55
推荐指数
3
解决办法
8万
查看次数

命令"修复项目属性"到底做了什么?

"Project-> Android Tools-> Fix Project Properties"Eclipse命令exaclty有什么作用?

我已经阅读了很多次使用它,主要是在与Eclipse中的Android R生成问题相关的答案中,但对我来说它就像魔术一样,我按下它并且我认为它修复了一些项目属性,但没有任何反应......没有视觉效果反馈,没有关于修复了哪些项目属性的信息......任何人都可以对它究竟做了什么有所了解?

谢谢

eclipse android eclipse-plugin adt

20
推荐指数
1
解决办法
1万
查看次数

将100个活动应用程序移植到碎片而不会死亡

我为银行开发了一个巨大的应用程序.该应用程序使用户能够通过电话执行大量操作(国内和国际转移,证券,股票市场价值,警报,存款,卡更改,卡激活,支票等).

所有应用程序都运行Android本机代码,每个屏幕都是一个Activity.

现在我们正在转向Fragments ......基于这些教程,我可以继续这样 ......我甚至已经优化了它们的流程.

但是,根据他们的建议,我将不得不创建大约100个新的Fragment类; 切换我在每个屏幕活动上的代码,并将其放在新的每个屏幕片段类中; 更新大约100个布局; 最后更新屏幕触发新屏幕的方式(使用FragmentManager而不是Intents).

也许并不困难,但繁琐乏味.

我的问题是,有人知道将100个活动应用程序移植到Fragments的快速方法比提到的教程更快吗?

谢谢

port android android-fragments android-3.0-honeycomb android-activity

18
推荐指数
1
解决办法
1808
查看次数

在活动之间保留片段状态

它可以保留一个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

15
推荐指数
2
解决办法
1万
查看次数

片段如何影响活动"用户可以做的单一,集中的事情"原则?

正如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

11
推荐指数
1
解决办法
2625
查看次数

使用add()方法添加片段不会隐藏先前的片段

当使用add()方法添加新片段时,我遇到了"意外行为".

我想在FrameLayout上添加一个新片段,但是当我这样做时,前面的片段仍然可见.

  • 这是使用add()方法时的预期结果吗?

  • 这是因为我使用FrameLayout和add()方法只是在FrameLayout上放置一个片段而不影响前一个?

谢谢

android fragment android-fragments android-3.0-honeycomb

5
推荐指数
2
解决办法
1万
查看次数

片段行为:FragmentTransaction :: replace()和反向backStack操作

我将此方法称为从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语句......我得到了异常.

我对你做错了什么了解吗?

谢谢.

android fragment android-fragments android-3.0-honeycomb

5
推荐指数
1
解决办法
1万
查看次数