Android Fragments的行为不符合预期

时间:2012-02-07 01:25:14

标签: android android-fragments

所以我有一个具有FragmentPagerAdapter的Activity,在每个片段中我有另外两个Fragment(这里称为a和b)。片段a是ListFragment,而片段b只是显示值的普通片段。

这里有两个问题......

1。)我无法从片段B中的活动中获取视图

2。)如果我注释掉了抓取,而不是在选择一个项目后在手机上显示片段A而不是B,那么IT会在同一个观看者上显示。

但是,我似乎无法正确加载我的布局。但是,如果我删除b一切似乎工作正常......

活动加载以下布局......

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">
    <com.viewpagerindicator.TitlePageIndicator
        android:id="@+id/indicator"
        android:padding="10dip"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        />
    <android.support.v4.view.ViewPager
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:id="@+id/mainpager"/>
</LinearLayout>

My First Fragment如下所示

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <fragment android:name="com.gleason.apa.fragment.BarListFragment"
            android:id="@+id/bar_list_fragment"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
    <fragment android:name="com.gleason.apa.fragment.BarEditFragment"
            android:id="@+id/bar_edit_fragment"
            android:layout_weight="2"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
</LinearLayout>

片段A

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Bar Name: " />
        <TextView
            android:id="@+id/bar_name_list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Address: " />

        <TextView
            android:id="@+id/bar_address_list"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
</LinearLayout>

Fragement B

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Bar Name" />
        <EditText
    android:id="@+id/bar_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="text"
        android:hint="Name"
        />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Address" />

        <EditText
            android:id="@+id/bar_address"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" 
            android:inputType="text"
            android:hint="Address"/>
    </LinearLayout>
<Button
    android:id="@+id/submitBar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="Add Game"/>
</LinearLayout>

然而,当我尝试编译并运行时,我得到以下内容......

android.view.InflateException: Binary XML file line #6: Error inflating class fragment
java.lang.NullPointerException

有什么想法吗?

更新:

因此空指针异常来自BarEditFragment ...

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    ....
    name = (EditText) activity.findViewById(R.id.bar_name);
    address = (EditText) activity.findViewById(R.id.bar_address);
Button submit = (Button) activity.findViewById(R.id.submitBar);
}

所有这些都回来了。

此外,如果我删除它们,片段显示两者,即使在我的手机上。所以它并排显示两个小片段,而不是它应该的2个“屏幕”。

这也不起作用......

activity.getFragmentManager().findFragmentById(R.id.bar_edit_fragment).getView().findViewById(R.id.bar_name);

1 个答案:

答案 0 :(得分:0)

我缺少的是你需要创建布局,告诉它是单窗格还是双窗格。解决这个问题的最佳方法是使用NewsReader示例作为模板。