【问题标题】:How to open new activities on item click from sliding menu?如何从滑动菜单单击项目时打开新活动?
【发布时间】:2014-02-20 20:13:24
【问题描述】:

我刚刚创建了一个滑动菜单,但是当我按下菜单中的项目时,它们并没有打开我设置的活动。这是我的 onItemClick 方法的代码:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // Highlight the selected item, update the title, and close the drawer
    // update selected item and title, then close the drawer
    mDrawerList.setItemChecked(position, true);         
    //You should reset item counter 
    mDrawer.closeDrawer(mDrawerList);
    if ( position == 1 ) {
        Intent intent = new Intent(MainActivity.this, PrimActivitate.class);
        startActivity(intent);
        mDrawer.closeDrawers();
        if ( position == 2 ) {
            Intent intent2 = new Intent(MainActivity.this, Profesori.class);
            startActivity(intent2);
            mDrawer.closeDrawers();
        }

问题是:当我按下第一项时,应用程序崩溃,当我按下第二项时,它什么也没做..

编辑:

02-20 15:27:43.991: E/AndroidRuntime(1278): FATAL EXCEPTION: main
02-20 15:27:43.991: E/AndroidRuntime(1278): Process: com.orar.cngcnasaud, PID: 1278
02-20 15:27:43.991: E/AndroidRuntime(1278): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.orar.cngcnasaud/com.orar.cngcnasaud.PrimActivitate}; have you declared this activity in your AndroidManifest.xml?
02-20 15:27:43.991: E/AndroidRuntime(1278):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1628)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1424)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at android.app.Activity.startActivityForResult(Activity.java:3424)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at android.app.Activity.startActivityForResult(Activity.java:3385)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at android.app.Activity.startActivity(Activity.java:3627)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at android.app.Activity.startActivity(Activity.java:3595)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at com.orar.cngcnasaud.MainActivity$DrawerItemClickListener.onItemClick(MainActivity.java:179)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at android.widget.AdapterView.performItemClick(AdapterView.java:299)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at android.widget.AbsListView$3.run(AbsListView.java:3638)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at android.os.Handler.handleCallback(Handler.java:733)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at android.os.Handler.dispatchMessage(Handler.java:95)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at android.os.Looper.loop(Looper.java:136)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at android.app.ActivityThread.main(ActivityThread.java:5017)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at java.lang.reflect.Method.invokeNative(Native Method)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at java.lang.reflect.Method.invoke(Method.java:515)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-20 15:27:43.991: E/AndroidRuntime(1278):     at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 请显示错误的logcat。
  • 当按下第二个时它什么也没做,因为开始第二个活动的代码在第一个条件内。
  • 我已经编辑了第一篇文章!
  • 将您的活动添加到 AndroidManifest。记住活动名称前的点。

标签: android android-intent slidingmenu slidingdrawer


【解决方案1】:

如我所见,永远不会到达位置 == 2,在 if ( position == 2 ) 之前关闭 if ( position == 1 ),试试看:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    mDrawerList.setItemChecked(position, true);         
    mDrawer.closeDrawer(mDrawerList);
    if ( position == 1 ) {
        Intent intent = new Intent(MainActivity.this, PrimActivitate.class);
        MainActivity.this.startActivity(intent);
        mDrawer.closeDrawers();
        }
    if ( position == 2 ) {
        Intent intent2 = new Intent(MainActivity.this, Profesori.class);
        MainActivity.this.startActivity(intent2);
        mDrawer.closeDrawers();
        }

}

关于您忘记添加到您的AndroidManifest.xml 的崩溃:

<activity android:label="@string/app_name" android:name="com.orar.cngcnasaud.PrimActivitate"/>
<activity android:label="@string/app_name" android:name="com.orar.cngcnasaud.Profesori"/>

【讨论】:

  • PrimActivitate 和 Profesori 是否扩展了 Activity?或其他包上的那些,您必须将 AndroidManifest 中的所有包名称设置为已编辑
  • 是的,他们做到了.. 我做到了。非常感谢!
  • 我愿意为你所有,你是最好的,但我的声望不到 15.. 所以我不能..对不起
【解决方案2】:

当你按下第二个项目时 onItemClick() 什么也没做,因为 如果(位置 == 2) 在里面 如果(位置 == 1)。

您也可以发布崩溃堆栈跟踪吗?

【讨论】:

  • 请使用 cmets 对 OP 进行上述类型的回复或改写您的答案。
  • 我无法首先添加 cmets,因为我没有 50 名声望 :-(。无论如何感谢您的建议。
  • 请记住以备不时之需,因为低质量的答案会被否决:) 如果您想从 OP 获得澄清或额外信息,请使用 cmets。祝你好运
【解决方案3】:

正如您的 logcat 建议的那样,您尚未在清单中声明您的 PrimActivitate。将这些添加到您的 AndroidManifest:

<activity android:name=".PrimActivitate"></activity>

如果不存在,也添加第二个:

<activity android:name=".Profesori"></activity>

接下来,首先将您的第二个条件移到 OUTSIDE 之外,以便处理您的两个案例:

if (position == 1) {
    Intent intent = new Intent(MainActivity.this, PrimActivitate.class);
    startActivity(intent);
    mDrawer.closeDrawers();
}
else if (position == 2) {
    Intent intent2 = new Intent(MainActivity.this, Profesori.class);
    startActivity(intent2);
    mDrawer.closeDrawers();
}

【讨论】:

    猜你喜欢
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多