【问题标题】:How to get the fragment instance from the FragmentActivity?如何从 FragmentActivity 中获取片段实例?
【发布时间】:2011-12-16 09:55:35
【问题描述】:

我在FragmentActivity中设置了内容视图,Activity会根据布局文件中指定的类名为我创建片段实例。但是我怎样才能得到那个片段实例呢?

public class MyActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle extra) {
        super.onCreate(extra);
        setContentView(R.layout.page_fragment);
    }
}

布局/page_fragment.xml:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/pageview"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:name="org.xi.android.PageFragment" />

【问题讨论】:

    标签: android user-interface android-fragments


    【解决方案1】:

    您可以在FragmentManager 中使用findFragmentById

    由于您使用的是 Support 库(您正在扩展 FragmentActivity),您可以使用:

    getSupportFragmentManager().findFragmentById(R.id.pageview)
    

    如果你没有使用支持库(所以你在 Honeycomb+ 并且你不想使用支持库):

    getFragmentManager().findFragmentById(R.id.pageview)
    

    请考虑即使在 Honeycomb+ 上也建议使用支持库。

    【讨论】:

    【解决方案2】:

    在扩展FragmentActivity的类中获取片段实例:

    MyclassFragment instanceFragment=
        (MyclassFragment)getSupportFragmentManager().findFragmentById(R.id.idFragment);
    

    在扩展Fragment的类中获取片段实例:

    MyclassFragment instanceFragment =  
        (MyclassFragment)getFragmentManager().findFragmentById(R.id.idFragment);
    

    【讨论】:

    • 这是正确的答案。另一个(经过验证的)答案在使用支持库 v4 的片段的情况下不起作用,如问题中使用的那样(FragmentActivity 仅存在于支持库中)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多