2013-10-21 46 views
0

我有一個應用程序鏈接到一個數據庫,爲此我需要打開一個菜單,選擇保存,退出和取消,當後退按鈕被按下。該菜單已經創建,並且它可以工作(與listview一起使用),但我不知道如何將其與onbackpressed方法一起使用。任何建議?背上按下打開的上下文菜單

第一:

registerForContextMenu(listview); 
    listview.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
       long id) { 
      // TODO Auto-generated method stub 
      openContextMenu(listview); 
     } 

    }); 

則:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 
{ 
super.onCreateContextMenu(menu, v, menuInfo); 
    menu.setHeaderTitle(R.string.MenuSospechosoQuestion); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_borrar_sospechoso, menu); 
} 

最後:

public boolean onContextItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
case R.id.sospBorrar: 

      conex = new Conexion(this); 
      conex.conectar(); 
      conex.actualizar("DELETE FROM SOSPECHOSOS WHERE ID_SOSPECHOSO = " + (ids.get(pos))); 
      ids.remove(pos); 
      names.remove(pos); 
      llenarLista(); 
      conex.desconectar(); 

     return true; 
     case R.id.sosEditar: 
      intent = new Intent(DenunciaMenuSuspect.this, Suspect.class); 
      intent.putExtra("toUpdate", true); 
      intent.putExtra("id", String.valueOf(ids.get(pos))); 
      startActivityForResult(intent, 1); 

     return true; 
     case R.id.cancelar: 
     return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 
+1

這聽起來像一個設計問題。就個人而言,這不是我期望的移動應用程序的工作方式,改變標準行爲的應用程序很煩人。 「退出」是什麼意思?這就是後退按鈕! – Simon

+0

是的,我希望退出按鈕這樣做,退出,但是,我希望用戶可以選擇保存之前做到這一點 – user2904714

回答

2

嘗試使用對話框來代替菜單。

private AlertDialog dialog; 
@Override 
public void onBackPressed() 
{ 
    if(dialog == null) 
    { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getBaseContext()); 
     builder.setPositiveButton("save",new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       //save your data 
      } 
     }); 
     builder.setNegativeButton("exit",new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       finish(); 
      } 
     }); 
     builder.setTitle("Are you sure?"); 
     dialog = builder.create(); 
     dialog.show(); 
    } 
    else 
    { 
     super.onBackPressed(); // or dialog.dismiss(); 
     dialog = null; 
    } 
} 
+0

如果我這樣做的用戶只有將有選擇保存或退出,而不是選項留在當前部分。 – user2904714

+0

@ user2904714看到我編輯的答案,現在用戶可以留在當前部分(只需再次按回來關閉對話框) – dooplaye

1

你只需要重寫你的活動這樣的onBackPressed方法:

@Override 
public void onBackPressed() { 
    //Do what you want 
} 

編輯: dooplaye的答案是一個好方法。

您可以自定義視圖設置爲AlertDialog.Builder這樣的:

builder.setView('yourListView'); 
+0

是的,我對它,但問題是在openContextMenu(? ??) – user2904714

+0

發佈與按鈕 – nsvir

+0

一起工作的代碼我的列表視圖工作正常,問題是如何實現這種行爲來壓倒 – user2904714

0
@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK); 
    this.getWindow().openPanel(Window.FEATURE_OPTIONS_PANEL, event); 
}