2015-11-13 43 views
-1

我知道有很多關於使用setContentView崩潰的問題,但我還沒有發現任何與我的基本問題。setContentView崩潰時activity_main - >自定義

這基本上是我第一天使用Android Studio。我目前正沿着Paulo Dichone的Udemy Android課程繼續學習。他讓我們做的第一件事之一就是將開始的佈局改爲我們自己製作的佈局。即使改變不到一行,也會導致我的模擬程序在Genymotion中崩潰。

這裏是MainActivity.java的代碼。我改變了原來的(唯一的)唯一的事情就是將activity_main作爲setContentView的參數(在onCreate的第二行),我將其改爲mylayout。

package welcomeandroid.myandroid.com.welcomeandroid; 

import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mylayout); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

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

爲我的自定義佈局 'mylayout' 的XML代碼如下:運行程序

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Please work" 
    android:id="@+id/textView2" 
    android:layout_gravity="center_horizontal" /> 

的logcat的消息如下:

11-12 23:28:17.584 2244-2244/? I/art: Late-enabling -Xcheck:jni 
11-12 23:28:18.026 2244-2244/welcomeandroid.myandroid.com.welcomeandroid  D/AndroidRuntime: Shutting down VM 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime: FATAL EXCEPTION: main 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime: Process: welcomeandroid.myandroid.com.welcomeandroid, PID: 2244 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{welcomeandroid.myandroid.com.welcomeandroid/welcomeandroid.myandroid.com.welcomeandroid.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.access$800(ActivityThread.java:151) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:135) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5254) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:372) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.support.v7.internal.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:100) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.support.v7.internal.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:93) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.support.v7.internal.app.ToolbarActionBar.<init>(ToolbarActionBar.java:78) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.support.v7.app.AppCompatDelegateImplV7.setSupportActionBar(AppCompatDelegateImplV7.java:206) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:99) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at welcomeandroid.myandroid.com.welcomeandroid.MainActivity.onCreate(MainActivity.java:19) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.Activity.performCreate(Activity.java:5990) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.access$800(ActivityThread.java:151)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:135)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5254)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:372)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)  
11-12 23:28:18.028 2244-2244/welcomeandroid.myandroid.com.welcomeandroid E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  
11-12 23:28:22.531 2244-2244/welcomeandroid.myandroid.com.welcomeandroid I/Process: Sending signal. PID: 2244 SIG: 9 

我真的很感激任何幫助。根據教師指示的方式,僅僅改變了一小段代碼就會陷入這種麻煩,這有點令人沮喪。

+3

您的佈局沒有工具欄或FloatingActionButton,但活動仍在尋找他們。看看你的堆棧跟蹤中的「由......引起:」行。 –

回答

2

你必須從你的代碼中刪除以下行:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(toolbar); 

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
fab.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
       .setAction("Action", null).show(); 
    } 
}); 

,因爲你沒有工具欄和FloatingActionButton包含在您的佈局。

+0

這樣做。謝謝! – Theogeo

0

作爲邁克說你的佈局沒有工具欄或FloatingActionButton。試試這個XML它可以幫助你

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Please work" 
     android:id="@+id/textView2" 
     android:layout_gravity="center_horizontal" /> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
     /> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.design.widget.FloatingActionButton 

     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right|bottom" 
     android:layout_marginBottom="@dimen/activity_vertical_margin" 
     android:layout_marginRight="@dimen/activity_horizontal_margin" 
     android:src="@drawable/ic_refresh_white_36dp" 
     app:borderWidth="0dp" /> 
    </LinearLayout> 

好運