2013-03-02 8 views
9

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

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) ] 
+0

+1どうgetActionBarあなたのonCreateで()の仕事は、あなたがPreferenceActivityから拡張しているかどう – Simon

+0

におけるETの参照をこっそりよりも何のためならば? –

答えて

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; 
} 
4

オーバーライドonOptionsItemSelected:ここ

コードですアクティビティでは、ID値がandroid.R.id.menuのアイコンがクリックされると呼び出されます。

関連する問題