10

私の PreferenceActivity は、1 つのことを除いてうまく機能します。他のすべてのアクティビティでユーザーを前のアクティビティに完全に戻す ActionBar アイコンは、PreferenceActivity では機能しません。アイコンをクリックすると、前のアクティビティに戻るかのように点滅しますが、PreferenceActivity は画面に残ります。興味深いことに、戻るボタンはユーザーを前のアクティビティに戻します。PreferenceActivity で ActionBar のホーム アイコンを「正常に」動作させる方法はありますか?

コードは次のとおりです。

public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  // Set actionBar controls for Settings
    TextView actionBarTitle = (TextView) findViewById(Resources.getSystem().getIdentifier("action_bar_title", "id", "android"));
    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);  
    actionBar.setIcon(R.drawable.ic_launcher); 
    actionBar.setDisplayShowTitleEnabled(true); 
    actionBarTitle.setTextColor(Color.WHITE);
    actionBarTitle.setTextSize(16); 
    actionBar.setTitle(R.string.settings_menu_title);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {  //Build.VERSION_CODES.ICE_CREAM_SANDWICH
        actionBar.setHomeButtonEnabled(true); 
        actionBar.setDisplayHomeAsUpEnabled(true); // show back arrow on title icon
        actionBar.setDisplayShowHomeEnabled(true);
    }
...... Handle prefs (all working fine).....
   }

}

//////そして呼び出しコード ////////

 //Use menu button to access settings screen
    @Override
   public boolean onKeyDown(int keycode, KeyEvent e) {
       switch(keycode) {
        case KeyEvent.KEYCODE_MENU:
            Intent intent = new Intent(this, SettingsActivity.class);
            startActivity(intent);
            return true;
       }
       return super.onKeyDown(keycode, e);
    }  // [END onKeyDown (for menu click capture) ]
4

2 に答える 2

12

正しい方向に向けてくれた@Axarydaxに感謝します。ホームボタンがMainActivity ではなく呼び出し元のアクティビティに戻るため、PreferenceActivity他のアクティビティとは異なることに気付きました。したがって、ソリューションには、(1) startActivityForResult (startActivity の代わりに) を使用して PreferenceActivity を呼び出し、(2) PreferenceActivity で onOptionsItemSelected を使用してリターンを管理する必要がありました (@Axarydax の回答による)。(1) と (2) の両方を以下に示します。

 // (1) Menu button used to access PreferenceActivity
 @Override
  public boolean onKeyDown(int keycode, KeyEvent e) {
      switch(keycode) {
        case KeyEvent.KEYCODE_MENU:
          Intent intent = new Intent(this, SettingsActivity.class);
          startActivityForResult(intent, 1);  //enables return to here
          return true;
        }
      return super.onKeyDown(keycode, e);
  }  

 // (2) Return to calling activity from PreferenceActivity
   @Override
 public boolean onOptionsItemSelected(MenuItem item) {
     if (item.getItemId() == android.R.id.home) {
         int SUCCESS_RESULT=1;
         setResult(SUCCESS_RESULT, new Intent());
         finish();  //return to caller
         return true;
     }
     return false;
 }
于 2013-03-02T21:10:16.160 に答える
4

アクティビティでオーバーライドonOptionsItemSelectedすると、アイコンが ID 値でクリックされたときに呼び出されますandroid.R.id.menu

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        //do your code
        return true;
    }
    return false;
}
于 2013-03-02T07:52:45.750 に答える