我想將按鈕添加到片段以調用另一個片段。我通過下面的代碼添加。Android片段導致NPE「嘗試調用虛擬方法」錯誤
package com.munz.lop;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* A simple {@link Fragment} subclass.
*/
public class HomeFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_home, container, false);
}
public HomeFragment() {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
HomeFragment homeFragment = new HomeFragment();
transaction.add (R.id.relativelayout_for_fragment, homeFragment );
transaction.commit();
// Required empty public constructor
}
public void onSelectFragment(View view){
Fragment newFragment;
if(view == view.findViewById (R.id.btnAbout)){
newFragment = new AboutFragment();
} else if(view == view.findViewById (R.id.btnFeedback)){
newFragment = new FeedbackFragment();
} else if (view == view.findViewById (R.id.btnContacts)){
newFragment = new ContactUsFragment();
} else {
newFragment = new HomeFragment();
}
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace (R.id.relativelayout_for_fragment, newFragment);
transaction.addToBackStack (null);
transaction.commit();
}
}
它有沒有錯誤,但我打開滑蓋菜單它強制該菜單停止與下面的logcat的應用程序:
D/ViewRootImpl: ViewPostImeInputStage processPointer 0
D/ViewRootImpl: ViewPostImeInputStage processPointer 1
D/ViewRootImpl: ViewPostImeInputStage processPointer 0
D/ViewRootImpl: ViewPostImeInputStage processPointer 1
D/ViewRootImpl: ViewPostImeInputStage processPointer 0
D/ViewRootImpl: ViewPostImeInputStage processPointer 1
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.munz.lop, PID: 27402
java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.FragmentTransaction android.support.v4.app.FragmentManager.beginTransaction()' on a null object reference
at com.munz.lop.HomeFragment.<init>(HomeFragment.java:32)
at com.munz.lop.SliderActivity.onNavigationItemSelected(SliderActivity.java:100)
at android.support.design.widget.NavigationView$1.onMenuItemSelected(NavigationView.java:150)
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811)
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:958)
at android.support.design.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:308)
at android.view.View.performClick(View.java:5716)
at android.view.View$PerformClick.run(View.java:22596)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Application terminated.
請在「Fragment」上找到一個很好的教程。要幫助你並不容易,因爲你犯了很多錯誤的事情。 – peter
規範[NPE問題]的可能重複(https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it/218510)?我還沒有投票結束,因爲我沒有爲Android開發,但它看起來像一個dup。 – halfer
@Impmpence:logcats只能以代碼格式顯示。它們不需要另外放置在報價塊中。 – halfer