0

以下のコードをご覧ください...コンテキストメニューを作成してメソッドを実装していますonContextItemSelectedが、問題は、返信項目を押すと...削除ケースのダイアログも表示され、アクティビティも2回開始されることです。 ..すべてのケースが実行されることを意味します...返信を削除してケースを転送します...問題が発生した場合は、助けてください

@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>
4

2 に答える 2

1

ケースステートメントの後にブレークを追加します

編集:あなたは休憩を逃しているので、あなたは次のケースブロックに陥ります。ケースステートメントにブレークを追加する(そして後で戻り値を処理する)か、ブレークの代わりにreturntrueを直接追加します。

于 2012-04-12T09:19:59.103 に答える
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;
    }
于 2012-04-12T09:37:31.703 に答える