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

Android fragments: container variable in onCreateView is null

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

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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>

此布局通过以下代码加载到main活动中:

1
2
3
4
5
6
7
public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_screen);
    }
}

MainFragment类如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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在onCreateView()

中被赋予了一个空容器

所有人都说我需要使用交易,但我不了解的是:
如果我的某个片段在布局中是不可变的,并且不需要更改(例如在这种情况下,并且像在许多示例中您具有包含项目列表的ListFragment一样),那么我该如何为布局充气在当前视图内?

使用ListFragment可以工作,但是如果我不想使用它,该怎么办?

onCreateView方法被正确调用。


在主布局中,尝试使用android:layout_width="match_parent"而不是android:layout_width="0dp"

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