将菜单设置为滑动菜单,在充气时导致崩溃

时间:2015-03-08 10:43:18

标签: android slidingmenu

我目前正在尝试将滑动菜单开源库实现到我正在处理的项目中,经过大量与配置的斗争,以及最终导入成功的内容。

我正在尝试在类ProfileActivity中实现Sliding Menu,它扩展了SingleFragmentActivity,扩展了包含的FragmentActivity类。

public abstract class SingleFragmentActivity extends FragmentActivity {
protected abstract Fragment createFragment();
protected abstract int getContentViewlayout();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(getContentViewlayout());
    FragmentManager fm = getFragmentManager();
    Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);

    if (fragment == null) {
        fragment = createFragment();
        fm.beginTransaction()
            .add(R.id.fragmentContainer, fragment)
            .commit();
    }
}

}

然而,我的ProfileActivity类中的这段代码导致应用程序在我测试时崩溃:

slidingMenu = new SlidingMenu(this);
    slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
    slidingMenu.setShadowWidthRes(R.dimen.slidingmenu_shadow_width);
    slidingMenu.setShadowDrawable(R.drawable.slidingmenu_shadow);
    slidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
    slidingMenu.setFadeDegree(0.35f);
    slidingMenu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
    slidingMenu.setMenu(R.layout.slidingmenu);

具体来说,最后一行

slidingMenu.setMenu(R.layout.slidingmenu);

导致此logcat输出:

03-08 21:29:19.015  30272-30272/au.com.jobinhood.android.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: au.com.jobinhood.android.app, PID: 30272
java.lang.RuntimeException: Unable to start activity ComponentInfo{au.com.jobinhood.android.app/au.com.jobinhood.android.app.activity.ProfileActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
        at android.app.ActivityThread.access$800(ActivityThread.java:139)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5086)
        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:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:469)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
        at com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.setMenu(SlidingMenu.java:375)
        at au.com.jobinhood.android.app.activity.ProfileActivity.onCreate(ProfileActivity.java:52)
        at android.app.Activity.performCreate(Activity.java:5248)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)

该菜单是根据本网站的教程实施的:http://www.michenux.net/android-sliding-menu-part-1-657.html

如果我取出违规行,菜单会滑出但它只是空白区域,而如果我包含它,则切换到片段(从启动此片段的菜单项B,从另一个片段,A )它会崩溃,我不需要先试着刷出菜单。

导致崩溃的实际setMenu方法驻留在我导入后未触及的slidingMenu库中:

setMenu(LayoutInflater.from(getContext()).inflate(res, null));

请注意,logcat是不完整的 - 我无法包含一个长logcat,甚至将它分成多个块,其间有一条线,因为尽管选择了格式化选项,我已经拥有的所有内容都被包含为纯文本。可以在以下位置找到完整的logcat:

http://pastebin.com/2LaBGsQ7

非常感谢任何有关确定问题根本原因的帮助。

2 个答案:

答案 0 :(得分:0)

查看您的logcat第38行:

Caused by: java.lang.NullPointerException: name == null

at(logcat line 50)

au.com.jobinhood.android.app.activity.ProfileActivity.onCreate(ProfileActivity.java:52)

也许这是你的问题...

P.S。:只是抬头: FragmentActivity使用support.v4.app库加载,因此您必须使用getSupportFramentManager()来加载和查找片段。

答案 1 :(得分:0)

对于遇到此问题且遵循我所做的相同教程的任何人 - 指令中的错误(或者至少将其附加到我现有的代码中)导致崩溃。

在第二页(http://www.michenux.net/android-sliding-menu-part-22-690.html)上,它告诉您将res / layout / slidingmenu.xml编辑为片段,但这会破坏滑动菜单。按照第1页上的说明离开它可以使其正常运行。