AndroidRuntime java.lang.NoClassDefFoundError my.package.CustomActionBarDrawerToggle

时间:2015-01-27 13:57:16

标签: java android

我使用Eclipse作为IDE。 Android SDK Platform-tools 21(最新版)

通过向导,我添加了一个"导航抽屉活动"。下一步 - >下一步 - >完成。

然后我看到有不推荐使用的方法,我已经在这里检查了一些因为在API版本21中已弃用,其他因为v4被v7替换了。

   <uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="21" />

我想支持v15,没有弃用,并用5.0编译它(我不确定这是否是正确的方法)

我已将导入更改为:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.DrawerLayout;

如其他帖子中的建议。

同样在FragmentActivity Activity

public class HomeActivity extends FragmentActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks 

也改变了:

@Override
public void onNavigationDrawerItemSelected(int position) {
    // update the main content by replacing fragments

    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.container, PlaceholderFragment.newInstance(position + 1)).commit();
}

并添加了忽略:

// http://stackoverflow.com/a/27626971 : ignore, because it is not only for android 5.0
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);

此类与生成的内容相比没有其他更改。

NavigationDrawerFragment有一些变化。进口已经变为上面。

setUp()声明根据其他SO帖子提取和修改的匿名类。

在这一行,它是例外:

mDrawerToggle = new CustomActionBarDrawerToggle(this, getActivity(), mDrawerLayout);

这是班级:

import android.app.Activity;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.view.View;

public class CustomActionBarDrawerToggle extends ActionBarDrawerToggle {

    private NavigationDrawerFragment navigationDrawerFragment;

    public CustomActionBarDrawerToggle(NavigationDrawerFragment navigationDrawerFragment, Activity mActivity, DrawerLayout mDrawerLayout) {
        super(mActivity, mDrawerLayout, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        this.navigationDrawerFragment = navigationDrawerFragment;
    }

    @Override
    public void onDrawerClosed(View drawerView) {
        super.onDrawerClosed(drawerView);
        if (!navigationDrawerFragment.isAdded()) {
            return;
        }

        navigationDrawerFragment.getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
    }

    @Override
    public void onDrawerOpened(View drawerView) {
        super.onDrawerOpened(drawerView);
        if (!navigationDrawerFragment.isAdded()) {
            return;
        }

        if (!navigationDrawerFragment.isUserLearnedDrawer()) {
            // The user manually opened the drawer; store this flag to prevent auto-showing
            // the navigation drawer automatically in the future.
            navigationDrawerFragment.setUserLearnedDrawer(true);
            SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(navigationDrawerFragment.getActivity());
            sp.edit().putBoolean(NavigationDrawerFragment.PREF_USER_LEARNED_DRAWER, true).apply();
        }

        navigationDrawerFragment.getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
    }

}

使用文件导入我已从SDK中导入android-support-v7-appcompat标记为库并进行编译。

我已将依赖项设置为此项目并标记为Order And Export。

我已将appcompat中的android-support-v4.jar复制到我的项目中,但版本相同。

。在运行时仍然是相同的异常

我已将.bin目录中的android-support-v7-appcompat.jar(已编译的目录)添加到我的项目库中。在运行时仍然是同样的错误。

在提取匿名类之前,消息是NoClassDefFoundError android.support.v7.app.ActionBarDrawerToggle,因为我记得 - 父类。

昨天浪费了一整天来弄清楚并以删除和使用弃用的方法结束,但我想有一个非弃用的版本 - 如果可能的话。

请提出建议,我还没有提出建议!

0 个答案:

没有答案