0

У меня есть ящик для навигации с фрагментами, и мое приложение рушится после поворота устройства и нажатия на меню. Мой код на основной деятельности:Ошибка приложения после того, как я вращаю устройство и нажимаю на меню

public class MainActivity extends FragmentActivity { 


    private DrawerLayout mDrawerLayout; 
    ImageView home; 
    Fragment fragment = null; 
    TextView appname; 
    ExpandableListView expListView; 
    HashMap<String, List<String>> listDataChild; 
    ExpandableListAdapter listAdapter; 
    List<String> listDataHeader; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     String fontPath = "neue.ttf"; 
     setContentView(R.layout.activity_main); 
     home = (ImageView)findViewById(R.id.home); 
     home.setOnClickListener(homeOnclickListener); 
     appname = (TextView)findViewById(R.id.appname); 
     Typeface tf = Typeface.createFromAsset(this.getAssets(), fontPath); 
     appname.setTypeface(tf); 

     if(savedInstanceState == null){ 
      setUpDrawer(); 
     } 
    } 


    private void setUpDrawer() { 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerLayout.setScrimColor(getResources().getColor(android.R.color.transparent)); 
     mDrawerLayout.setDrawerListener(mDrawerListener); 
     expListView = (ExpandableListView) findViewById(R.id.lvExp); 
     prepareListData(); 
     listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild); 
     // setting list adapter 
     expListView.setAdapter(listAdapter); 
     fragment = new Inicio(); 
     getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, fragment).commit(); 
     mDrawerLayout.closeDrawer(expListView); 

     expListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 
      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 
       switch (groupPosition) { 
        case 0: 
         switch (childPosition) { 
          case 0: 
           fragment = new enunciados_definiciones(); 
           break; 
          case 1: 
           fragment = new enunciados_ayuda_victima(); 
           break; 
          case 2: 
           fragment = new enunciados_abordaje(); 
           break; 
          case 3: 
           fragment = new transmision_enfermedades(); 
           break; 
          default: 
           fragment = new Inicio(); 
           break; 
         } 
         break; 

        case 1: 
         switch (childPosition) { 
          case 0: 
           fragment = new Inicio(); 
           break; 
          case 1: 
           fragment = new Inicio(); 
           break; 
          case 2: 
           fragment = new Inicio(); 
           break; 
          default: 
           break; 
         } 
         break; 

        case 2: 
         switch (childPosition) { 
          case 0: 
           fragment = new Inicio(); 
           break; 
          case 1: 
           fragment = new Inicio(); 
           break; 
          case 2: 
           fragment = new Inicio(); 
           break; 
          default: 
           break; 
         } 
         break; 

        default: 
         break; 
       } 
       getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, fragment).commit(); 
       mDrawerLayout.closeDrawer(expListView); 
       return false; 
      } 
     }); 
    } 

Мой код продолжает, как эта ошибка LogCat (строка: 140) его на следующий фрагмент кода:

View.OnClickListener homeOnclickListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(mDrawerLayout.isDrawerOpen(expListView)){ 
       mDrawerLayout.closeDrawer(expListView); 
      }else{ 
       mDrawerLayout.openDrawer(expListView); 
      } 
     } 
    }; 

Мой LogCat:

FATAL EXCEPTION: main 
java.lang.NullPointerException 
at com.eiusweb.primerosauxilios.MainActivity$2.onClick(MainActivity.java:140) 
at android.view.View.performClick(View.java:4162) 
at android.view.View$PerformClick.run(View.java:17082) 
at android.os.Handler.handleCallback(Handler.java:615) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4867) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774) 
at dalvik.system.NativeStart.main(Native Method) 

Thanks

ответ

0

Хорошо, я получил его, должен был изменить что-то, но это сработало. Вынул setUpDrawer() от if null, как и предложение от Gabe Sechan. и изменить его на

setUpDrawer(); 
     if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, new Inicio()).commit(); 
     } 

Я также удалил fragment = new Inicio(); и все getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, fragment).commit();

И обновляются все случаи к case 0:fragment = new enunciados_definiciones(); break; Спасибо

0

Вы вызываете setupDrawer только в том случае, если ваш savedInstanceState имеет значение NULL. Это означает, что он не вызывается, когда вы воссоздаете активность при вращении. Однако здесь вы устанавливаете значение mDrawerLayout. Поэтому, когда onClick вызывается после вращения, mDrawerLayout имеет значение null. Чтобы исправить это, вам нужно установить значение mDrawerLayout в обоих случаях.

На самом деле я понятия не имею, почему вы не вызываете setupDrawer, если savedInstanceState не имеет значения null, это кажется очень неправильным.

+0

Я понимаю, но если я не использую в нуль, когда я поворачивать экран приложение «перезагружается» –

+0

Так или иначе. Вы должны это учитывать. Посмотрите, как обращаться с поворотами на Android. Или отключите эту функциональность с помощью инструкции configChanges в вашем манифесте. –

0

Move

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
expListView = (ExpandableListView) findViewById(R.id.lvExp); 

от setUpDrawer() до onCreate() перед тем if block.

+0

Это сработало, это не сбой, но теперь содержимое ящика не отображается после поворота. –

 Смежные вопросы

  • Нет связанных вопросов^_^