我有一个只基于片段的应用程序,实际上(我只是创建基本内容)我只有一个片段,直接在布局中声明:
<?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方法。
答案 0 :(得分:1)
在您的主要版面中,请尝试使用android:layout_width="match_parent"
代替android:layout_width="0dp"
。
你不应该在onSaveInstanceState(savedInstanceState)
中致电onCreate
;当你的片段下移以允许它保存其状态时,框架会调用它。