2013-12-18 7 views
0

Я хочу показать окно предупреждения пользователю, когда нажата кнопка «Назад». Например: Вы действительно хотите выйти? У меня нет проблемы при создании диалогового окна предупреждения. У меня есть проблема в том, где вызвать этот метод диалогового окна().Как создать диалоговое окно предупреждения при нажатии кнопки «Назад»?

Это мой HomeScreen.java

public class HomeScreen extends TabActivity { 
    ConferenceOpenHelper helper_ob; 
    Cursor cursorHome; 
    ProfileEditScreen profileEditScreen; 
    ConferenceAdapter adapter; 
    EcMeeting meeting; 
    final Context context = this; 
    public static int HOMETEMP = 1;// Constant for Deleting the last created id 
// in edit profile screen (Cancel) 
    public static String HOME = "home";// constant for updating status column 
    public static String CUSTOM_DIALER = "custom"; 
    public static String TEMPLATE = "template";// constant for updating status    // column 
    public static TabHost tabHost; 
    public static final int QUICK_START = 1;// Constant for menu options 
    public static final int TEMPLATE_SCREEN = 2;// Constant for menu options 
    public static final int USER_GUIDE = 3;// Constant for menu options 
    public static final int QUICK_CALL = 4; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.tab);   
     Resources ressources = getResources();  
     tabHost = getTabHost();   
     // Android tab 
     Intent photo = new Intent().setClass(this,EcMeeting.class); 
      TabSpec tabSpecphoto = tabHost 
       .newTabSpec("Calendar") 
       .setIndicator("Calendar", ressources.getDrawable(R.drawable.calendartab)) 
       .setContent(photo); 
     // Apple tab 
     Intent intentApple = new Intent().setClass(this,CallListScreen.class); 
     TabSpec tabSpecApple = tabHost 
      .newTabSpec("Calls") 
      .setIndicator("Calls", ressources.getDrawable(R.drawable.ic_action_device_access_call)) 
      .setContent(intentApple); 

     // Windows tab 
     Intent intentWindows = new Intent().setClass(this,UserSettingActivity.class); 
     TabSpec tabSpecWindows = tabHost 
      .newTabSpec("Settings") 
      .setIndicator("Settings", ressources.getDrawable(R.drawable.ic_action_setting)) 
      .setContent(intentWindows); 

     // add all tabs 
     tabHost.addTab(tabSpecphoto); 
     tabHost.addTab(tabSpecApple); 
     tabHost.addTab(tabSpecWindows); 

     //set Windows tab as default (zero based) 
     /*tabHost.setCurrentTab(0);*/ 

     for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) 
      { 
       tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#d3d3d3")); 
      } 
      tabHost.getTabWidget().setCurrentTab(0); 
      /*tabHost.getTabWidget().getChildAt(0).setBackgroundColor(Color.parseColor("#C35817"));*/ 
     } 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     menu.add(0, QUICK_START, 0, "Quick Start").setIcon(R.drawable.ic_menu_add_icon);   
     menu.add(0, USER_GUIDE, 0, "User Guide").setIcon(R.drawable.ic_menu_guide_icon); 

     return true; 
    } 

    @Override 
    public void onBackPressed() { 
     new AlertDialog.Builder(this) 
       .setMessage("Are you sure you want to exit?") 
       .setCancelable(false) 
       .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         HomeScreen.this.finish(); 
        } 
       }) 
       .setNegativeButton("No", null) 
       .show(); 
    } 







    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     super.onOptionsItemSelected(item); 
     switch (item.getItemId()) { 
     case QUICK_START: 
      startActivity(new Intent(this, ConfDialerScreen.class)); 
      break; 

     case USER_GUIDE: 
      startActivity(new Intent(this, UserGuideScreen.class)); 
      break; 
     } 
     return true; 
    } 
     public void onTabChanged(String tabId) { 
      // TODO Auto-generated method stub 
      for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) 
      { 
       tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#8A4117")); 
      } 

      tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundColor(Color.parseColor("#C35817"));  
    } 
} 

Это метод(), чтобы создать оповещение диалоговое

@Override 
    public void onBackPressed() { 
     new AlertDialog.Builder(this) 
       .setMessage("Are you sure you want to exit?") 
       .setCancelable(false) 
       .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         HomeScreen.this.finish(); 
        } 
       }) 
       .setNegativeButton("No", null) 
       .show(); 
    } 

Теперь, я действительно не знаю, где это назвать method.Could кто-то дать Есть идеи?

Когда пользователь нажимает кнопку «Назад», я хочу показать диалоговое окно оповещения.

+1

Вы называете это правильно. В чем проблема? –

+0

Он должен работать следующим образом. Запустите этот код на эмуляторе или устройстве и нажмите кнопку возврата –

+0

onBackPressed() написано, что я не знал, где вызвать эту функцию – user2841300

ответ

3

Try ниже код:

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     dialogOnBackPress(); 

     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

protected void dialogOnBackPress() { 

    new AlertDialog.Builder(this) 
      .setMessage("Are you sure you want to exit?") 
      .setCancelable(false) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        HomeScreen.this.finish(); 
       } 
      }) 
      .setNegativeButton("No", null) 
      .show(); 

} 
+0

Это правильно? – user2841300

+0

где назвать эту функцию - мой скромный вопрос? – user2841300

+1

Метод OnKeyDown является передовым методом avtivity. Он будет вызываться автоматически, когда вы нажимаете клавишу возврата. – Sanket

0

вы можете изменить этот код в соотв. по требованию.

dialog.setOnKeyListener(new Dialog.OnKeyListener() { 

       @Override 
       public boolean onKey(DialogInterface arg0, int keyCode, 
         KeyEvent event) { 
        // TODO Auto-generated method stub 
        if (keyCode == KeyEvent.KEYCODE_BACK) { 
         finish(); 
         dialog.dismiss(); 
        } 
        return true; 
       } 
      }); 
0

не называют super.onBackPressed(); в onBackPressed

+0

он не звонит .. –

1

Используйте это:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 

    if (keyCode == KeyEvent.KEYCODE_BACK) { 

     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Alert Message:"); 
     builder.setMessage("Do you want to save this image to your file??"); 
     builder.setPositiveButton("Yes", 
       new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         // TODO Auto-generated method stub 

              // do your stuff 

         } 
       }); 

     builder.setNegativeButton("No", 
       new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         // TODO Auto-generated method stub 
         dialog.dismiss(); 
         finish(); 
        } 
       }); 

     AlertDialog alert = builder.create(); 
     alert.show(); 

     return true; 
     } 

     return super.onKeyDown(keyCode, event); 
    } 
0

Иначе вы можете просто добавить onBackPressed() в activity_main.xml (tab.xml), как

андроида : onClick = "onBackPressed" упомянуть об этом в свойствах вашей кнопки

Смежные вопросы