Reputation: 127
please have a look at the code below...
i am creating a context menu and implementing the method onContextItemSelected
but the problem is that when i press the reply item...the dialog on the delete case also appears and the activity also starts twice...means all the cases executes...the delete the reply and the forward case...what happens to be the problem please help
@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);
}
}
and here is the error from the logcat that is displayed in the 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 is the class in which i am implementing the context menu..
and here is the code of the context menu file..
<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>
Upvotes: 0
Views: 326
Reputation: 34765
Once check this code a minor change in your onContextItemSelected method::
@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;
}
Upvotes: 0
Reputation: 521
add breaks after your case statements
Edit: You fall thru to the following case blocks because you are missing the breaks. Either add breaks to you case statements (and handle the return value later) or directly add return true instead of the breaks.
Upvotes: 1