Android自定义工具栏会导致java.lang.NoClassDefFoundError

时间:2015-07-17 15:57:40

标签: java android xml android-actionbar toolbar

我正在尝试实现自定义工具栏,但我遇到了这个错误

  

java.lang.NoClassDefFoundError:使用引导类加载器找不到类;没有可用的堆栈

我有支持库v4& appcompat v7。我尝试了所有的东西,但没有任何作用。

这是我的代码:

MainActivity.java

package com.example.customized_toolbar;



import java.util.ArrayList;
import java.util.zip.Inflater;

import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.*;
import android.widget.AdapterView;
import android.widget.ListView;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v7.widget.Toolbar;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {
/**
 * Called when the activity is first created.
 */

Toolbar mToolbar;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    mToolbar= (Toolbar) findViewById(R.id.toolbar);
    SetSupportActionBar(mToolbar);

}

private void SetSupportActionBar(Toolbar mToolbar) {
}

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<include
    xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/toolbar_actionbar"
    layout="@layout/toolbar_default"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

toolbar_default.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

</android.support.v7.widget.Toolbar>

菜单文件是main.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  tools:context=".MainActivity">
<item android:id="@+id/action_reply"
       android:title="Reply"
 />

<item android:id="@+id/action_undo"
      android:title="Undo"

       />


</menu>

Styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.AppCompat.Light"></style>
<style name="Theme"></style>
<style name="Theme.AppCompat"></style>
<style name="Theme.AppCompat.NoActionBar"></style>

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar"></style>

<style name="MyTheme" parent="Theme.AppCompat.NoActionBar">

    <item name="android:windowActionBar">false</item>

  </style>

</resources><br/> 

的AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.customized_toolbar"
      android:versionCode="1"

      android:versionName="1.0">
<uses-sdk android:minSdkVersion="15"
        android:targetSdkVersion="21"/>
<application android:label="@string/app_name"
             android:theme="@style/MyTheme"
             android:icon="@drawable/ic_launcher">
    <activity android:name="MainActivity"
              android:label="@string/app_name"
            android:theme="@style/MyTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
</application>
</manifest>

1 个答案:

答案 0 :(得分:1)

更改

 mToolbar= (Toolbar) findViewById(R.id.toolbar_actionbar);

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

确保您的MainActivity扩展AppCompatActivity 而不是ActionBarActivity

更改

SetSupportActionBar(mToolbar);

setSupportActionBar(mToolbar);

编辑:

public class MainActivity extends AppCompatActivity {

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

     @Override
     public boolean onCreateOptionsMenu(Menu menu)
     {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        menu.getItem(0);
        menu.getItem(1);
        return super.onCreateOptionsMenu(menu);

      }
    }