2013-03-02 25 views
9

My PreferenceActivity hoạt động tốt ngoại trừ một điều. Biểu tượng ActionBar, hoàn toàn trả về người dùng về hoạt động trước đó trong tất cả các hoạt động khác của tôi không hoạt động trong PreferenceActivity. Khi tôi nhấp vào biểu tượng nó nhấp nháy như thể nó sẽ trở lại hoạt động trước đó nhưng PreferenceActivity vẫn còn trên màn hình. Điều thú vị là nút quay lại sẽ đưa người dùng trở lại hoạt động trước đó. Có cách nào để làm cho biểu tượng Home của ActionBar hoạt động "bình thường" trong PreferenceActivity không?PreferenceBiểu tượng Homebar hành động chủ động sẽ không trở về nhà (không giống như ET :)

Đây là mã:

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)..... 
    } 

}

////// Và đoạn code gọi ////////

//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 nếu vì không có gì hơn lén một tham chiếu ET trong – Simon

+0

Làm thế nào sẽ getActionBar() làm việc trong onCreate của bạn, nếu bạn đang kéo dài từ PreferenceActivity ?? –

Trả lời

12

Nhờ @Axarydax đã chỉ cho tôi đúng hướng. Tôi đã nhận ra rằng PreferenceActivity khác với các hoạt động khác của tôi kể từ khi nút Home quay trở lại gọi Hoạt động thay vì cho MainActivity. Do đó, giải pháp được yêu cầu (1) sử dụng startActivityForResult (thay vì startActivity) để gọi PreferenceActivity và (2) sử dụng onOptionsItemSelected trong PreferenceActivity để quản lý trả về (cho mỗi câu trả lời của Axarydax). Cả (1) và (2) đều được hiển thị dưới đây:

// (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

override onOptionsItemSelected tại của bạn Hoạt động, nó sẽ được gọi khi biểu tượng được nhấp với giá trị ID là android.R.id.menu

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == android.R.id.home) { 
     //do your code 
     return true; 
    } 
    return false; 
} 
Các vấn đề liên quan