2013-02-28 75 views
2

我目前正在研究Android的这个代码,它有一个动态创建的listfragment。即使listview被动态分配给它。它从SQL Lite中获取一个简单的游标对象并将其分配给一个适配器。为动态创建的ListFragment分配ID

这一切都很好,问题是当方向发生变化时,savedInstanceState包始终为空。即使我重写OnSaveInstanceState并将项添加到该包或onCreateView。我做了一些研究,发现这是因为片段没有分配ID。

我有点问题,在哪里分配一个ID到listfragment和如何。我正在使用FragmentTransaction并使用TAG标识符。

我希望在这个问题上的任何帮助。

谢谢。

回答

1

看看这个问题:Android - Set fragment id

您可以将ID不分配到动态创建的片段。

但是,您可以创建一个.xml布局文件并使用android:id="@+id/my_fragment"为您的片段分配一个ID。有没有原因你没有使用XML定义的片段?

+0

我在前面看过这个问题,我再深入一点地阅读它,我很难过发现你不能将ID分配给一个动态创建的片段(这对于android dev来说没有任何意义-1球队)。我开始使用动态创建的片段编写我的整个应用程序,因为它非常好的练习和非常好的代码重用性。虽然它不是一个不可能完成的任务,但我可以使用sharedpreferences和对象序列化来完成任务。我只是想弄明白我是否可以避免这种做法。 – aali83 2013-02-28 20:09:22

+0

当我刚开始探索Android时,我也尝试使用动态创建的布局编写我的应用程序,但后来我意识到通过xml布局文件实现它实际上更容易。代码可重用性不会受到影响,它可以让您将UI和算法分开。只是我2美分。 – 2013-02-28 20:34:13

+0

一节课我拒绝学习lol,但对于我的应用程序,我使用sherlockActionBar以及切换开关在每个选项卡中动态替换多个片段,因此我无法使用xml布局。 – aali83 2013-03-01 19:40:36

2

您可以在交易时进行此操作。如果你打电话

FragmentTransaction.replace(containerViewId, fragment, tag); 

OR

FragmentTransaction.add(fragment,tag) 

OR

FragmentTransaction.add(containerViewId, fragment, tag); 

然后,您可以使用tag得到这样

Fragment参考
+0

我知道这一点。这正是我将片段添加到事务管理器(通过TAG)的方式。问题完全不同,因为片段没有ID而导致方向更改发生时,我无法保留我的savedInstanceState包。我偶然发现如何为动态创建的片段分配一个ID,该片段已经通过TAG动态添加到片段交易对象中。 – aali83 2013-02-28 20:04:26

+0

不幸的是我相信将唯一的ID添加到一个片段是在xml中。 – 2013-03-01 01:56:05

+0

我很害怕,谢谢杰森。 – aali83 2013-03-01 19:37:01