Android片段:onCreateView中的容器变量为null

时间:2014-07-05 18:09:14

标签: android android-fragments

我有一个只基于片段的应用程序,实际上(我只是创建基本内容)我只有一个片段,直接在布局中声明:

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

    <fragment
        android:name="com.italialinux.fragments.MainFragment"
        android:id="@+id/main_screen_fragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        />

</FrameLayout>

此布局在主活动中加载,使用以下代码:

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_screen);
    }
}

MainFragment类如下:

public class MainFragment extends Fragment {


    final static private long ONE_SECOND = 1000;
    final static private long TWENTY_SECONDS = ONE_SECOND * 20;

    private final static String TAG = "MainFragment";
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        View view = inflater.inflate(R.layout.new_reminder, container, false);
        return view;    
    }

new_reminder布局只包含两个EditText和几个标签。

问题是我无法扩充布局,因为在onCreateView中传递的容器变量为null。

我在SO上看到很多问题,如下所示: Android Fragment is given a null container in onCreateView()

所有人都说我需要使用交易,但我不理解的是: 如果我有一个不可变的片段,在布局中,并且不需要更改(就像在这种情况下,并且像许多示例中你有一个包含项目列表的ListFragment),我如何膨胀当前视图中的布局?

使用ListFragment可行,但如果我不想使用它会怎么样?

正确调用onCreateView方法。

1 个答案:

答案 0 :(得分:1)

在您的主要版面中,请尝试使用android:layout_width="match_parent"代替android:layout_width="0dp"

你不应该在onSaveInstanceState(savedInstanceState)中致电onCreate;当你的片段下移以允许它保存其状态时,框架会调用它。