我使用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,因为我记得 - 父类。
昨天浪费了一整天来弄清楚并以删除和使用弃用的方法结束,但我想有一个非弃用的版本 - 如果可能的话。
请提出建议,我还没有提出建议!