上下文菜单无法正常工作

时间:2012-04-12 09:18:40

标签: android

请看下面的代码...... 我正在创建一个上下文菜单并实现方法onContextItemSelected,但问题是,当我按下回复项目时...删除案例上的对话框也会出现,活动也会开始两次...表示所有案例执行...删除回复和转发案例...问题恰好是请帮助

@Override
    public boolean onContextItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        switch(item.getItemId())
        {
    case R.id.reply:
    {
            Intent i = new Intent();
             String s2 = (String) ((Cursor) getListView().getItemAtPosition(info.position))
                    .getString(2);
             i.putExtra("number", s2);
        //   Log.v("number", s2);
             i.setClass(this, CreateMessage.class);
            // i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             startActivity(i);

    }   
        case R.id.delete:
        {

        final String s = (String) ((Cursor) getListView().getItemAtPosition(info.position))
                        .getString(1);

              dba = new DBAdapter(this);

                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setMessage("Are you sure you want to delete?")
                       .setCancelable(false)
                       .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int id) {
                            //   Log.v("", "You Clicked " + s);             


                            dba.delete("messages", "id=?", new String[] { s });
                            populate();
                            dba.close();
                           }
                       })
                       .setNegativeButton("No", new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int id) {
                                dialog.cancel();
                           }
                       });
                AlertDialog alert = builder.create();
                alert.show();
        }

        case R.id.forward:
        {
            Intent i = new Intent();
            String s3 = (String) ((Cursor) getListView().getItemAtPosition(info.position))
                    .getString(4);
        //  Log.v("message", s3);
            i.putExtra("message", s3);
            i.setClass(this, CreateMessage.class);
            startActivity(i);
        }
default:

        return super.onContextItemSelected(item);
        }
    }

以下是logcat中显示的logcat错误...

03-30 09:13:28.439: E/WindowManager(2273): Activity sms.app.Displayer has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44eb95c8 that was originally added here

sms.app.Displayer是我正在实现上下文菜单的类..

这是上下文菜单文件的代码..

<menu xmlns:android="http://schemas.android.com/apk/res/android" >


    <item android:id="@+id/reply" android:title="Reply"></item><item
        android:id="@+id/forward"
        android:title="Forward">
    </item>
    <item android:id="@+id/delete" android:title="Delete Message">
    </item>

</menu>

2 个答案:

答案 0 :(得分:1)

在案例陈述后添加中断

编辑: 你跌入以下案件区块,因为你错过了休息时间。要么为case语句添加中断(稍后处理返回值),要么直接添加return true而不是break。

答案 1 :(得分:0)

检查此代码后,onContextItemSelected方法::

会发生微小变化
@Override
    public boolean onContextItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        switch(item.getItemId()){
        case R.id.reply:
            Intent i = new Intent();
            String s2 = (String) ((Cursor) getListView().getItemAtPosition(info.position))
                    .getString(2);
            i.putExtra("number", s2);
            //   Log.v("number", s2);
            i.setClass(this, CreateMessage.class);
            // i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(i);
            break;
        case R.id.delete:   

            final String s = (String) ((Cursor) getListView().getItemAtPosition(info.position))
                    .getString(1);

            dba = new DBAdapter(this);

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("Are you sure you want to delete?")
            .setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    //   Log.v("", "You Clicked " + s);             


                    dba.delete("messages", "id=?", new String[] { s });
                    populate();
                    dba.close();
                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        break;

        case R.id.forward:
            Intent i = new Intent();
            String s3 = (String) ((Cursor) getListView().getItemAtPosition(info.position))
                    .getString(4);
            //  Log.v("message", s3);
            i.putExtra("message", s3);
            i.setClass(this, CreateMessage.class);
            startActivity(i);
        break;
        }
        return true;
    }