Tôi đang cố gắng sử dụng các đoạn Android theo cách rất đơn giản, tương tự như hướng dẫn trên trang web dành cho nhà phát triển Android.Android Fragment được cung cấp một vùng chứa rỗng trong onCreateView()
Tôi có một hoạt động (MediaInfoActivity) với đoạn mã sau:
public class MediaInfoActivity extends FragmentActivity {
private final String TAG = "MediaInfoActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "onCreate()");
setContentView(R.layout.media_info_activity_layout);
}
}
Đây là mã cho file media_info_activity_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment class="com.hawkforce.test.MediaInfoFragment"
android:id="@+id/mediaInfoFragment"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp" />
<FrameLayout android:id="@+id/mediaPlayerBarPanel"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<fragment class="com.hawkforce.test.MediaPlayerBarFragment"
android:id="@+id/mediaPlayerBar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>
Và cuối cùng ở đây là mã cho MediaInfoFragment:
public class MediaInfoFragment extends Fragment {
private final static String TAG = "MediaInfoFragment";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "onCreate()");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.i(TAG, "onCreateView()");
if (container == null) {
Log.i(TAG, "onCreateView(): container = null");
}
return inflater.inflate(R.layout.media_info_fragment_layout, container, false);
}
}
Đây là vấn đề của tôi: vùng chứa được truyền trong phương thức onCreateView() của MediaInfoFragment là null. Như tôi đã hiểu, điều này chỉ nên xảy ra đối với các mảnh không phải UI. Tuy nhiên, Fragment của tôi có một giao diện người dùng, được hiển thị OK trên màn hình khi tôi khởi chạy MediaInfoActivity. Nó gây ra vấn đề vì không có kiểu được khai báo trong tệp sơ đồ bố trí xml của đoạn được áp dụng.
Đây là Log của tôi:
I/MediaInfoActivity: onCreate()
I/MediaInfoFragment: onCreate()
I/MediaInfoFragment: onCreateView()
I/MediaInfoFragment: onCreateView(): container = null
Am tôi thiếu bất cứ điều gì rõ ràng ở đây?
Bạn sử dụng sai nghĩa là nó không được đính kèm vào vùng chứa. –
Bạn có nghĩa là trong inflater, phải không? Tôi đã thay đổi nó thành sự thật nhưng không có thay đổi. Cộng với dòng này: 'onCreateView(): container = null' được hiển thị trước cuộc gọi đến inflater. Vấn đề của tôi thực sự là Android vượt qua null như một đối số thứ hai cho onCreateView() và tôi không hiểu nó xuất phát từ đâu. – HawkForce
- http://stackoverflow.com/questions/27306805/android-fragment-oncreateview-container-is-null - http://stackoverflow.com/questions/24589202/android-fragments-container-variable-in- oncreateview-is-null – pRaNaY