2017-02-23 73 views
0

Я не могу решить эту проблему. Я думаю, что FragmentTransaction работает как «я создаю фрагмент, я его открываю», но это происходит неправильно. Моя проблема в том, что когда я вызываю метод из FragmentB, я получил NPE, так как мои значения не инициализируются. Так что происходит сейчас.Попытка вызова метода rom фрагмента B в фрагменте A и имеющий NPE

Проблема возникает, когда я пытаюсь вызвать метод configureSettingsMenus с позицией на клик в элементе Drawer.

 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; 
    } 
} 

Я инициализировать все нож для масла. Как и у, у вас есть настройкиText, я пытаюсь setText для каждой выбранной позиции.

Я получил NPE на settingsText.setText in fragmentB

и settingsFragment.configureSettingsMenus(position) в Fragmenta

Что не так? Любая помощь должна быть одобрена.

EDIT:

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 .. – rafsanahmad007

+0

Ваших 'settingsText' имеет значение NULL. Вы должны проверить еще раз. –

ответ

1

Это не очень хорошая практика общения непосредственно между фрагментами. Вы должны написать интерфейс в своем фрагменте и позволить подключенному действию реализовать интерфейс.

В вашем фрагменте:

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

В вашей деятельности:

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

Вы должны реализовать DrawerClickCallbacks в деятельности, прикрепленной к фрагменту