2014-06-21 48 views
-1

因此,我將<WebView>添加到標準導航抽屜模板,並在java文件中添加了一些代碼。但是,現在應用程序不斷崩潰。它在控制檯中引發的錯誤是Error inflating class fragment 它雖然編譯。那我該如何解決這個問題?我應該在其他地方添加<WebView>嗎?爲什麼我的Android應用程序崩潰與'錯誤膨脹類片段'?


activity_login.xml

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".login"> 

    <WebView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/main_webview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <fragment android:id="@+id/navigation_drawer" 
     android:layout_width="@dimen/navigation_drawer_width" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:name="test.vwebviewdrawer.NavigationDrawerFragment" 
     tools:layout="@layout/fragment_navigation_drawer" /> 

</android.support.v4.widget.DrawerLayout> 

main.java

package test.webviewdrawer; 

import android.support.v4.app.FragmentActivity; 
import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.ActionBar; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.widget.DrawerLayout; 
import android.view.View.OnClickListener; 
//... 


public class login extends ActionBarActivity 
    implements NavigationDrawerFragment.NavigationDrawerCallbacks { 


private NavigationDrawerFragment mNavigationDrawerFragment; 
private CharSequence mTitle; 

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

    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) { 
    WebView myWebView = (WebView) findViewById(R.id.main_webview); 
    String pageUrl = "http://www.google.com"; 
    myWebView.loadUrl(pageUrl); 

} 

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; 
     case 4: 
      mTitle = getString(R.string.title_section4); 
      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()) { 
     getMenuInflater().inflate(R.menu.login, menu); 
     restoreActionBar(); 
     return true; 
    } 
    return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

public static class PlaceholderFragment extends Fragment { 
    private static final String ARG_SECTION_NUMBER = "section_number"; 

    public static PlaceholderFragment newInstance(int sectionNumber) { 
     PlaceholderFragment fragment = new PlaceholderFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    public PlaceholderFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_login, container, false); 
     return rootView; 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     ((login) activity).onSectionAttached(
       getArguments().getInt(ARG_SECTION_NUMBER)); 
    } 
} 

} 

更新: 我增加了出錯提示,如註釋部分要求。

06-21 19:42:52.109 17625-17625/test.webviewdrawer E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: test.webviewdrawer, PID: 17625 
java.lang.RuntimeException: Unable to start activity ComponentInfo{test.webviewdrawer/test.webviewdrawer.login}: android.view.InflateException: Binary XML file line #28: Error inflating class fragment 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2653) 
     at android.app.ActivityThread.access$800(ActivityThread.java:156) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:157) 
     at android.app.ActivityThread.main(ActivityThread.java:5872) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:852) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:668) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.view.InflateException: Binary XML file line #28: Error inflating class fragment 
     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713) 
     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
     at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:375) 
     at android.app.Activity.setContentView(Activity.java:1997) 
     at android.support.v7.app.ActionBarActivity.superSetContentView(ActionBarActivity.java:216) 
     at android.support.v7.app.ActionBarActivityDelegateICS.setContentView(ActionBarActivityDelegateICS.java:110) 
     at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:76) 
     at test.webviewdrawer.login.onCreate(login.java:46) 
     at android.app.Activity.performCreate(Activity.java:5312) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2552) 
+1

安置自己的堆棧跟蹤,包括實際的錯誤信息。然後告訴我們編譯器抱怨代碼中的哪一行。 – MarsAtomic

+0

我的不好,我把它添加到更新中的問題。 – user3740505

+0

這可能是重複的:http://stackoverflow.com/questions/23653778/nullpointerexception-accessing-views-in-oncreate – indivisible

回答

2

有你的XML佈局中的錯字,在這一行:

android:name="test.vwebviewdrawer.NavigationDrawerFragment" 

它應該是:

android:name="test.webviewdrawer.NavigationDrawerFragment" 

,而不是:-)

相關問題