findFragmentById始终为null

时间:2013-06-27 23:03:12

标签: android actionbarsherlock android-fragmentactivity android-listfragment

尝试在xml布局中查找ListFragment始终返回null。我正在使用SherlockFragmentActivity和SherlockListFragment。这是代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_custom_layout);

        adapter = new My_Custom_Adapter(this, My_Object, My_Object_2);

    }

 // Create the list fragment and add it as the list content.
    if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) {
        mListFragment list = new mListFragment();
        getSupportFragmentManager().beginTransaction().add(android.R.id.content, list).commit();

    }
}

public static class mListFragment extends SherlockListFragment {

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        setListAdapter(adapter);
        setListShown(true);
    }

}

这是xml布局的缩短版本:

<RelativeLayout
   android:id="@+id/top_control_bar">
    <!-- Text Views -->
</RelativeLayout>
<RelativeLayout >
    <!-- Button -->
</RelativeLayout>
<LinearLayout
    android:id="@+id/start_data"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:layout_below="@id/top_control_bar"
    android:orientation="vertical" >

    <fragment 
    android:name="android.support.v4.app.ListFragment"
    android:id="@android:id/content"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
</LinearLayout>

findFragmentById(android.R.id.content)

始终返回null。为什么它不能在我的布局中找到片段?

2 个答案:

答案 0 :(得分:1)

您遇到的问题是您在xml中将片段声明为ListFragment。

getSupportFragmentManager()。findFragmentById(android.R.id.content)使用支持片段管理器,因此您需要一个SupportMapFragment

试试这个:

<fragment 
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:id="@android:id/content"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>

答案 1 :(得分:0)

应该不是

android:id="@android:id/content"

android:id="@+id/content"

documentation开始,您似乎使用了错误的语法。

我也不确定你的链式方法是否能正常工作。变化

 getSupportFragmentManager().beginTransaction().add(android.R.id.content, list).commit();

FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(android.R.id.content, list);
transaction.commit();
即便如此,老实说,我不知道你要做什么。您知道FragmentTransaction's add method as you're using it正在尝试将一个片段添加到容器中,该容器在if中已经建立为具有空值的容器?