2015-02-02 5 views
0

Я хочу сделать приложение, которое при входе в систему показывает «домашнюю» активность, в которой есть панель навигации. Я использовал шаблон ящика навигации для Android и отредактировал его для переключения между фрагментами, но теперь приложение сбой при входе в систему. Любая помощь в том, что я делаю неправильно, оценивается.Android-приложение продолжает сбой

P.S. Я любитель, поэтому извиняюсь за любые глупые вопросы.

package zade.example.com.zade; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 


public class Student_Home extends ActionBarActivity 
     implements NavigationDrawerFragment.NavigationDrawerCallbacks { 

    /** 
    * Fragment managing the behaviors, interactions and presentation of the navigation drawer. 
    */ 
    private NavigationDrawerFragment mNavigationDrawerFragment; 

    /** 
    * Used to store the last screen title. For use in {@link #restoreActionBar()}. 
    */ 
    private CharSequence mTitle; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_student__home); 

     mNavigationDrawerFragment = (NavigationDrawerFragment) 
       getSupportFragmentManager().findFragmentById(R.id.navigation_drawer); 
     mTitle = getTitle(); 

     // Set up the drawer. 
     mNavigationDrawerFragment.setUp(
       R.id.navigation_drawer, 
       (DrawerLayout) findViewById(R.id.drawer_layout)); 
    } 

    @Override 
    public void onNavigationDrawerItemSelected(int position) { 

     Fragment objfragment = null; 

     switch (position) { 
      case 1: 
       objfragment = new MyFragment1(); 
       break; 
      case 2: 
       objfragment = new MyFragment2(); 
       break; 
      case 3: 
       objfragment = new MyFragment3(); 
       break; 
     } 
     // update the main content by replacing fragments 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction() 
       .replace(R.id.container, objfragment) 
       .commit(); 
    } 

    public void onSectionAttached(int number) { 
     switch (number) { 
      case 1: 
       mTitle = getString(R.string.title_section1); 
       break; 
      case 2: 
       mTitle = getString(R.string.title_section2); 
       break; 
      case 3: 
       mTitle = getString(R.string.title_section3); 
       break; 
     } 
    } 

    public void restoreActionBar() { 
     ActionBar actionBar = getSupportActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
     actionBar.setDisplayShowTitleEnabled(true); 
     actionBar.setTitle(mTitle); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     if (!mNavigationDrawerFragment.isDrawerOpen()) { 
      // Only show items in the action bar relevant to this screen 
      // if the drawer is not showing. Otherwise, let the drawer 
      // decide what to show in the action bar. 
      getMenuInflater().inflate(R.menu.student__home, menu); 
      restoreActionBar(); 
      return true; 
     } 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

} 

LogCat является:

E/AndroidRuntime﹕ FATAL EXCEPTION: main 
     Process: zade.example.com.zade, PID: 2052 
     java.lang.RuntimeException: Unable to start activity ComponentInfo{zade.example.com.zade/zade.example.com.zade.Student_Home}: android.view.InflateException: Binary XML file line #19: Error inflating class fragment 
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
       at android.app.ActivityThread.access$800(ActivityThread.java:144) 
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
       at android.os.Handler.dispatchMessage(Handler.java:102) 
       at android.os.Looper.loop(Looper.java:135) 
       at android.app.ActivityThread.main(ActivityThread.java:5221) 
       at java.lang.reflect.Method.invoke(Native Method) 
       at java.lang.reflect.Method.invoke(Method.java:372) 
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
     Caused by: android.view.InflateException: Binary XML file line #19: Error inflating class fragment 
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763) 
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
       at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
       at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
       at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
       at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228) 
       at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102) 
       at zade.example.com.zade.Student_Home.onCreate(Student_Home.java:29) 
       at android.app.Activity.performCreate(Activity.java:5933) 
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
                at android.app.ActivityThread.access$800(ActivityThread.java:144) 
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
                at android.os.Handler.dispatchMessage(Handler.java:102) 
                at android.os.Looper.loop(Looper.java:135) 
                at android.app.ActivityThread.main(ActivityThread.java:5221) 
                at java.lang.reflect.Method.invoke(Native Method) 
                at java.lang.reflect.Method.invoke(Method.java:372) 
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
     Caused by: java.lang.NullPointerException: Attempt to write to field 'android.support.v4.app.FragmentManagerImpl android.support.v4.app.Fragment.mFragmentManager' on a null object reference 
       at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:416) 
       at android.support.v4.app.BackStackRecord.replace(BackStackRecord.java:451) 
       at android.support.v4.app.BackStackRecord.replace(BackStackRecord.java:443) 
       at zade.example.com.zade.Student_Home.onNavigationDrawerItemSelected(Student_Home.java:60) 
       at zade.example.com.zade.NavigationDrawerFragment.selectItem(NavigationDrawerFragment.java:200) 
       at zade.example.com.zade.NavigationDrawerFragment.onCreate(NavigationDrawerFragment.java:79) 
       at android.support.v4.app.Fragment.performCreate(Fragment.java:1763) 
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:913) 
       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
       at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1206) 
       at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2159) 
       at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:297) 
       at android.support.v7.app.ActionBarActivity.onCreateView(ActionBarActivity.java:547) 
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 
                at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
                at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
                at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
                at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
                at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228) 
                at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102) 
                at zade.example.com.zade.Student_Home.onCreate(Student_Home.java:29) 
                at android.app.Activity.performCreate(Activity.java:5933) 
                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
                at android.app.ActivityThread.access$800(ActivityThread.java:144) 
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
                at android.os.Handler.dispatchMessage(Handler.java:102) 
                at android.os.Looper.loop(Looper.java:135) 
                at android.app.ActivityThread.main(ActivityThread.java:5221) 
                at java.lang.reflect.Method.invoke(Native Method) 
                at java.lang.reflect.Method.invoke(Method.java:372) 
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
+0

Первым шагом будет анализ вашего [LogCat] (http://developer.android.com/tools/help/logcat.html), пожалуйста, отправьте его здесь. – Skynet

+1

@Skynet Я добавил его в вопрос. Пожалуйста, смотрите. Спасибо. – user3745964

ответ

3

Я быстро рассмотрел ваш код - я не мог видеть точную линию, которая дает вам эту проблему, но acording к вашему LogCat это очевидно, что вы забыли чтобы инициализировать что-то, или либо вы инициализировали что-то очень недавно, и попытались использовать его до инициализации: 90% времени, когда вы получаете ошибку «ComponentInfo» из-за этого.

Я попытаюсь посмотреть внимательно позже, но из этого совета вы сможете найти и исправить это самостоятельно.

Best, Mack.

+2

Найдено. Сделал глупую ошибку в использовании «case 1» вместо «case 0» в коммутаторе. Спасибо хоть. – user3745964

+0

@ user3745964 yeh, logcat показал, что в этой части вашего кода возникла проблема, я смотрел на нее, чтобы понять, что это было, но она показывала, что она пытается получить доступ к objfragment, и она, должно быть, все еще была нулевой , –

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