2012-03-27 138 views
6

我正在製作遊戲,並且有一個選項頁面可以打開或關閉音樂。我想重寫後退按鈕,使其返回到主頁,你就會明白爲什麼當你看到我的代碼:Android:更改後退按鈕的操作

public class OptionsActivity extends Activity { 

private boolean isMyServiceRunning(String serviceCanonicalClassName) { 
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if (serviceCanonicalClassName.equals(service.service.getClassName())) { 
      return true; 
     } 
    } 
    return false; 
} 

Intent i; // Handles MyMusicService.java 


protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.options); 


    final TextView tSound = (TextView) findViewById(R.id.textView2); 

    final Button saveBtn = (Button) findViewById(R.id.optSaveBtn); 
    final Button tblBtn = (Button) findViewById(R.id.tableBtn); 

    i=new Intent(this, MyMusicService.class); 

    final ToggleButton soundOption = (ToggleButton) findViewById(R.id.soundPref); 


    boolean musicPlays = isMyServiceRunning(MyMusicService.class.getCanonicalName()); 


    soundOption.setChecked(musicPlays); 


    if(musicPlays==true){ 

     tSound.setText("On"); 
    } 

    if(musicPlays==false) { 

     tSound.setText("Off"); 
    } 


    soundOption.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 

      // Perform action on clicks to control sound being on and off. 
      if(soundOption.isChecked()) { 

       Toast.makeText(OptionsActivity.this, "Music on.", Toast.LENGTH_SHORT).show(); 
       startService(i); 
       Intent i = new Intent(OptionsActivity.this, OptionsActivity.class); 
       startActivity(i); 

      } 

      else { 

       if(stopService(i)==true){ 

        soundOption.setChecked(false); 
        stopService(i); 
        Toast.makeText(OptionsActivity.this, "Music off.", Toast.LENGTH_SHORT).show(); 
        Intent i = new Intent(OptionsActivity.this, OptionsActivity.class); 
        startActivity(i); 

       } 
      } 
     } 

    }); 



    tblBtn.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 

      Intent tblView = new Intent(OptionsActivity.this, SQLView.class); 
      startActivity(tblView); 

     } 
    }); 



    saveBtn.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v) { 



      switch (v.getId()){ 

      case R.id.optSaveBtn: //Determine what will happen when the user presses the "Submit button". 
       boolean optionsWork = true; 
       try{ 

        String sound = tSound.getText().toString(); 

        optionsDB entry = new optionsDB(OptionsActivity.this); //Creating a new instance of MasterMind game 
        entry.open(); 
        entry.createOptionEntry(sound); //Passing both strings 
        entry.close(); 

       }catch (Exception e){ //Creating an error message if for some reason the app cannot transfer data to the Database. 

        Toast.makeText(OptionsActivity.this, "Error", Toast.LENGTH_SHORT).show(); 
       } 

       finally { //Creating an AlertDialog box when the user presses the Submit button. 

        if (optionsWork){ 

         Toast.makeText(OptionsActivity.this, "Settings Saved", Toast.LENGTH_SHORT).show(); 

        } 

       } 

       break; 

      } 
     } 
    }); 
} 

}

任何幫助將是非常美妙謝謝。

更新:新增此,仍然不能正常工作:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     // do something on back. 
     return true; 
    } 
    Intent i = new Intent(OptionsActivity.this, MainActivity.class); 
    startActivity(i); 
    return super.onKeyDown(keyCode, event); 
} 

回答

6

覆蓋活動的onKeyDown(),在這裏你可以處理各種按鍵或可以覆蓋onBackPresses()

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     // do something on back. 
     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 
+1

感謝您的評論,我已經嘗試過這一點,但我一直在進入選項類時一直收到強制關閉。有任何想法嗎? – 2012-03-27 11:28:34

+1

跟蹤你的Logcat,看看到底發生了什麼錯誤? – 2012-03-27 11:39:20

+0

好的,它不會崩潰了......現在只是沒有做任何事情,哈哈。 你能檢查我的修改答案嗎? – 2012-03-27 12:08:12

4
@Override 
public void onBackPressed() { 
    ............. 
} 
8

使用onBackPressed()函數覆蓋後退按鈕的操作。以下是一些示例代碼:

 @Override 
     public void onBackPressed() 
      { 
      Intent intent = new Intent(this,ABC.class); 
      startActivity(intent); 
      } 

在onBackPressed()函數中寫入所需的操作。