2012-04-12 4 views
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); 

    } 
     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); 
     } 
    } 

и вот ошибка от логарифма, который отображается в логарифме ...

03-30 09:13:28.439: E/WindowManager(2273): Activity sms.app.Displayer has leaked window [email protected] 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> 

ответ

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; 
    } 
+0

yes thats right, но возвращаемый оператор true должен быть во внешней области .... не после инструкции break – kashifmehmood

+0

oh отредактировал мой ответ по мере необходимости/предлагалось –

1

добавить перерывы после ваших заявлений случае

Редактировать: Вы попадаете в следующие блоки корпуса, потому что вам не хватает перерывов. Либо добавьте перерывы к операторам case (и обрабатывайте возвращаемое значение позже), либо сразу добавьте return true вместо перерывов.

+0

переломах выдает ошибку, что метод должен возвращать булево – kashifmehmood

+0

затем добавить возвращающие вместо разрывов –

+0

та же ошибка, если я добавить return true для всех случаев – kashifmehmood