2017-02-23 21 views
0

我無法解決此問題。我認爲FragmentTransaction像「我創建片段我打開它」一樣工作,但是這樣做會出錯。我的問題是,當我從FragmentB調用方法時,我得到了NPE,就像我的值不初始化。所以最近怎麼樣。試圖從fragmentA中調用fragmentB方法並使用NPE

問題是在這裏,當我嘗試調用方法configureSettingsMenus位置在抽屜中單​​擊的項目。

 result.setOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { 
      @Override 
      public boolean onItemClick(View view, int position, IDrawerItem drawerItem) { 
       FragmentTransaction ft = getChildFragmentManager().beginTransaction(); 
       ft.addToBackStack(null); 
//    settingsFragment.configureSettingsMenus(position); 
       result.closeDrawer(); 
//    ft.add(settingsFragment, "settingsFragment"); 
       if (settingsFragment != null && settingsFragment instanceof SettingsFragment) { 
        settingsFragment.configureSettingsMenus(position); 
        settingsFragment.show(ft, DIALOG_SETTINGS); 
       } 
       return true; 
      } 
     }); 

這裏是B片段

public void configureSettingsMenus(int position) { 
    switch (position) { 
     case TRADING_HISTORY: 
      settingsText.setText("fragment 0"); 
      break; 
     case LEADER_BOARD: 
      settingsText.setText("fragment 1"); 
      break; 
     case SPECIAL_OFFER: 
      settingsText.setText("fragment 2"); 
      break; 
     case VIDEO_TUTORIALS: 
      settingsText.setText("fragment 3"); 
      break; 
     case FAQ: 
      settingsText.setText("fragment 4"); 
      break; 
     case CONTACT: 
      settingsText.setText("fragment 5"); 
      break; 
     default: 

      break; 
    } 
} 

我初始化所有在Butterknife方法。像你看到你有settingsText我想爲每個選擇的位置設置文本。

我fragmentA

哪些錯誤了NPE上settingsText.setText in fragmentB

settingsFragment.configureSettingsMenus(position)?任何幫助approciate。

編輯:

Process: com.example.andrzej.forexapp, PID: 2329 
                      java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 
                       at com.example.andrzej.forexapp.activities.fragments.SettingsFragment.configureSettingsMenus(SettingsFragment.java:75) 
                       at com.example.andrzej.forexapp.activities.fragments.MainGameFragment$2.onItemClick(MainGameFragment.java:156) 
                       at com.mikepenz.materialdrawer.DrawerBuilder$5.onClick(DrawerBuilder.java:1716) 
                       at com.mikepenz.materialdrawer.DrawerBuilder$5.onClick(DrawerBuilder.java:1690) 
                       at com.mikepenz.fastadapter.FastAdapter$1.onClick(FastAdapter.java:492) 
                       at android.view.View.performClick(View.java:5637) 
                       at android.view.View$PerformClick.run(View.java:22429) 
                       at android.os.Handler.handleCallback(Handler.java:751) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:154) 
                       at android.app.ActivityThread.main(ActivityThread.java:6119) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
+0

發佈的logcat活動DrawerClickCallbacks .. – rafsanahmad007

+0

你'settingsText'爲null。你應該再檢查一次。 –

回答

1

這不是一個好的做法片段之間的直接通信。你必須在你的片段中編寫一個接口,並讓附加的活動來實現接口。

在您的片段:

public interface DrawerClickCallbacks{ 
     public void onItemClick(int position); 
    } 

在你的活動:

public void onItemClick(int position) { 
    settingsFragment.configureSettingsMenus(position); 
} 

你必須實現連接到片段

相關問題