我遇到了跨API问题。我的方案如下:
当我尝试使用这样的嵌套片段时出现问题:
<fragment
class="com.shinobicontrols.charts.ChartFragment"
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="match_parent" />
从另一个片段中检索对它的引用,如下所示:
public class TCPSpeedFragment extends android.support.v4.app.Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentManager fragMan = getChildFragmentManager();
// BELLOW LINE GIVES ERROR OF TYPE CONVERSION
android.app.Fragment frag = fragMan.findFragmentById(R.id.chart);
}
正如我们所看到的,给定的错误是类型不匹配:无法从android.support.v4.app.Fragment转换为android.app.Fragment 。但是当试图转换它们时,它变得非常痛苦,我还没有找到解决方案。
有没有人有想法解决此兼容性/转换问题?
答案 0 :(得分:1)
首先,我不相信您可以获得对XML中定义的嵌套Fragment
的引用。这本身就是错误的:嵌套Fragment
只能添加&amp;以编程方式删除,我很惊讶你没有想到这是一个潜在的问题。您在XML中定义Fragment
然后通过调用findViewById()
尝试获取对它的引用的方式是不正确的。
现在回答你的主要问题,不幸的是,没有方式将android.support.v4.app.Fragment
投射到android.app.Fragment
。您有以下选择:
Fragment
android.support.v4.app.Fragment
代替android.app.Fragment
android.support.v4.app.Fragment
的支持,而是在任何地方使用android.app.Fragment
在你的应用程序中。希望这很有用。
答案 1 :(得分:0)
嗯..我认为我找到了一个解决方案,就像我一直在寻找的那样。我使用以下几行:
Fragment frag = getChildFragmentManager().findFragmentById(R.id.chart);
SupportChartFragment supportFrag = (SupportChartFragment)frag;
ShinobiChart shinobiChart = supportFrag.getShinobiChart();
有了这个,我现在可以编译我的项目而没有错误。