[英]FragmentManager gives me NPE
我是第一次檢查片段,我創建了一個帶有FrameLayout的LinearLayout,並且為我的layout-sw600dp創建了一個帶有2個FrameLayouts的LinearLayout。
一個ID為“ main”,另一個ID為“ details”。
我得到的錯誤是:
Caused by: java.lang.NullPointerException
at android.app.BackStackRecord.doAddOp(BackStackRecord.java:395)
at android.app.BackStackRecord.add(BackStackRecord.java:385)
at mes.fallstudio.tvfall.MainActivity.onCreate(MainActivity.java:28)
第28行是這里的最后一行:
public class MainActivity extends AppCompatActivity {
private android.support.v4.app.Fragment mainFragment;
private android.app.Fragment detailsFragment;
private Boolean isDualPane = false;
private android.support.v4.app.FragmentManager fm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
mainFragment = fragmentManager.findFragmentById(R.id.main);
android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.main, mainFragment).commit();
}
}
XML布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
<FrameLayout
android:id="@+id/details"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
這是用於layout-sw600dp的,不包含第二個FrameLayout(詳細信息)的布局文件夾的xml文件。
如果有幫助,我正在擴展AppCompatActivity。 謝謝
AppCompatActivity
使用getSupportFragmentManager()
而不是getFragmentManager()
。
參考: https : //developer.android.com/reference/android/support/v7/app/AppCompatActivity.html
編輯:
在您的代碼中,您嘗試從XML布局中獲取mainFragment
。 但是,您未在此處定義它。 您可以在代碼中實例化mainFragment
:
mainFragment = new MainFragment();
或在您的XML中定義它:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:name="mes.fallstudio.tvfall.MainFragment"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/details"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
在后一種情況下,除非在運行時需要操作片段,否則根本不需要在代碼中使用FragmentManager
。
在這兩種情況下,您還需要實際的片段:
public class MainFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.main_fragment, container, false);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.